NHibernate 教程:使用 VB.NET 和 PostgreSQL

NHibernate是一个对象关系映射(ORM)框架,它允许开发者以面向对象的方式来处理数据库操作。本教程将指导如何在VB.NET2005 环境中使用 NHibernate 与PostgreSQL数据库进行交互。

环境准备

首先,需要下载并安装NHibernate。可以从 下载,或者在 Google 中搜索 NHibernate 并下载。

创建VB.NET项目

在 Visual Studio 2005 中创建一个新的 Windows 应用程序项目,命名为 "WindowsApplication1"。

在项目中添加一个表单,放置三个标签和文本框,分别用于输入员工编号(eno)、姓名(ename)和工资(salary),以及一个保存按钮。

通过右键点击项目名 "WindowsApplication1" 并选择 "Add Reference",在弹出的对话框中添加以下引用:

  • Iesi.Collections.dll
  • log4net.dll
  • Mono.Security.dll
  • Npgsql.dll(PostgreSQL 用户需要)
  • Nhibernate.dll
  • System.Data.Sqlxml

创建数据库表

在 PostgreSQL数据库中创建一个名为 "testcust" 的表,包含以下字段:

  • eno(整数)
  • ename(字符串,最大长度为15)
  • salary(整数)

为 eno 字段设置主键。

添加类文件

通过 "Add New Item" 添加一个新的类文件,并将其重命名为 "testcust.vb"。

以下为 testcust.vb 的代码:

Imports NHibernate Imports NHibernate.Cfg Imports log4net Imports System.Configuration Public Class testcust Private enumber As Int32 Private sal As Int32 Private empname As String Public Overridable Property eno() As Int32 Get Return enumber End Get Set(ByVal value As Int32) enumber = value End Set End Property Public Overridable Property ename() As String Get Return empname End Get Set(ByVal value As String) empname = value End Set End Property Public Overridable Property salary() As Int32 Get Return sal End Get Set(ByVal value As Int32) sal = value End Set End Property End Class

配置数据库连接

在项目中添加一个新的文本文件,并将其重命名为 "app.config"。在 app.config 文件中编写以下代码:

<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="nhibernate" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> </configSections> <log4net> <appender name="rollingFile" type="log4net.Appender.RollingFileAppender, log4net"> <param name="File" value="log.txt" /> <param name="AppendToFile" value="true" /> <param name="RollingStyle" value="Date" /> <param name="DatePattern" value="yyyy.MM.dd" /> <param name="StaticLogFileName" value="true" /> <layout type="log4net.Layout.PatternLayout, log4net"> <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] <%X{auth}> - %m%n" /> </layout> </appender> <logger name="MyApp"> <level value="DEBUG" /> <appender-ref ref="rollingFile" /> </logger> </log4net> <nhibernate> <add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider" /> <add key="hibernate.dialect" value="NHibernate.Dialect.PostgreSQLDialect" /> <add key="hibernate.connection.driver_class" value="NHibernate.Driver.NpgsqlDriver" /> <add key="hibernate.connection.connection_string" value="Server=10.3.2.1;Database=GBDEVEL;User Name=erpdotnet;Password=erp" /> </nhibernate> </configuration>

请根据实际情况修改数据库连接字符串中的用户名、密码和服务器名称。

编写表单代码

在 Form1 中添加三个标签和文本框用于输入 eno、ename 和 salary,以及一个保存按钮。以下为 Form1 的代码:

Imports NHibernate Imports NHibernate.Cfg Imports log4net Imports System.Configuration Imports NHibernate.Connection Imports Iesi.Collections Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim myConfig As New Configuration myConfig.AddAssembly("WindowsApplication1") myConfig.SetProperty("hibernate.dialect", "NHibernate.Dialect.PostgreSQLDialect") Dim myFactory As ISessionFactory = myConfig.Configure.BuildSessionFactory Dim mySession As ISession = myFactory.OpenSession Dim myTransaction As ITransaction = mySession.BeginTransaction Dim cust As New testcust cust.eno = TextBox1.Text cust.ename = TextBox2.Text cust.salary = TextBox3.Text mySession.Save(cust) myTransaction.Commit() mySession.Close() MsgBox("success") End Sub End Class

映射文件

创建一个名为 "testcust.hbm.xml" 的映射文件,并编写以下代码:

<?xml version="1.0" encoding="utf-8" ?> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"> <class name="WindowsApplication1.testcust, WindowsApplication1" table="erp.testcust"> <id name="eno" column="eno" type="Int32"> <generator class="assigned" /> </id> <property name="ename" column="ename" type="String" length="15" /> <property name="salary" column="salary" type="Int32" length="12" /> </class> </hibernate-mapping>

请确保数据库表、类文件和映射文件中的属性名称大小写一致。

配置文件

也可以使用 "hibernate.cfg.xml" 文件代替 "app.config"。以下是 hibernate.cfg.xml 的示例代码:

<?xml version="1.0" encoding="utf-8" ?> <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"> <session-factory> <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property> <property name="connection.driver_class">NHibernate.Driver.NpgsqlDriver</property> <property name="connection.connection_string">Server=10.3.2.1;Database=GBDEVEL;User Name=erpdotnet;Password=erp</property> <property name="show_sql">false</property> <property name="dialect">NHibernate.Dialect.PostgreSQLDialect</property> <property name="use_outer_join">true</property> <mapping resource="WindowsApplication1.testcust.hbm.xml" assembly="WindowsApplication1" /> </session-factory> </hibernate-configuration>

如果使用 app.config,则不需要编写 hibernate.cfg.xml。反之亦然。

运行项目

保存并运行VB.NET项目。可以通过这种方式与PostgreSQL数据库进行交互。

注意事项

请确保正确导入并连接所有必要的库,并将 "testcust.hbm.xml" 文件的 BuildAction 属性设置为 Embedded Resources。

如果没有这样做,可能会遇到 ADO 异常。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485