NHibernate - 入门

在本章中,我们将介绍如何使用NHibernate启动一个简单的示例.我们将构建一个简单的控制台应用程序.要创建控制台应用程序,我们将使用Visual Studio 2015,其中包含您需要创建的所有功能,使用NHibernate包测试您的应用程序.

以下是创建使用Visual Studio中提供的项目模板进行项目.

步骤1 : 打开Visual Studio,然后单击项目菜单选项.

第2步 : 将打开一个新的"项目"对话框.

项目对话框

步骤3 : 从左侧窗格中,选择Templates; Visual C; Windows.

第4步 : 在中间窗格中,选择控制台应用程序.

步骤5 : 在名称字段中输入项目名称'NHibernateDemoApp',然后单击确定继续.

步骤6 : 一旦项目由Visual Studio创建,您将在Solution Explorer窗口中看到许多文件.

Project Dialog

如您所知,我们已经创建了一个简单的控制台应用程序项目,现在我们需要将NHibernate包包含到我们的控制台项目中.

转到Tools菜单,然后选择NuGet Package Manager;包管理器控制台,它将打开包管理器控制台窗口.

管理器控制台窗口

指定上面 Package Manager控制台窗口中显示的命令,然后按Enter键,它将下载所有NHibernate依赖项并创建对所有必需程序集的引用.安装完成后,您将看到如下图所示的消息.

NHibernate Demo App

现在我们已经添加了NHibernate,现在我们可以开始实现了.因此,我们将首先映射一个名为 Student 的非常简单的,它只有一个名为ID的整数主键和FirstName和LastName列.

添加新项

我们需要一个班来代表这个学生,所以让我们创建右键单击解决方案资源管理器中的项目,然后选择Add;将打开Add New Item对话框的类.

Add New Item NHibernate

在名称字段中输入 Student.cs ,然后单击"添加"按钮.在这个Student类中,我们需要有一个名为ID的整数主键,我们需要创建这个字符串, FirstName LastName 字段,如下面的完整实现所示:学生班.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks;

namespace NHibernateDemoApp { 
   
   class Student { 
      public virtual int ID { get; set; } 
      public virtual string LastName { get; set; } 
      public virtual string FirstMidName { get; set; } 
   }
}

在处理NHibernate应用程序中的模型时,最简单的方法是将所有字段都设置为虚拟.所以这是我们将使用的简单NHibernate模型,并将其映射到后端数据库.

现在让我们转到Program类中的Main方法并创建一个新的NHibernate配置对象.

我们需要提供的第一件事是连接字符串.这是一个特定于数据库的连接字符串,找到连接字符串的最简单方法是右键单击 SQL Server对象资源管理器中的数据库,然后选择属性.

SQL Server对象资源管理器

它将打开属性窗口,现在向下滚动,您将看到连接字符串字段属性窗口.

属性窗口

复制连接字符串并指定在你的代码中.以下是我们需要配置NHibernate的Main方法的实现.

using NHibernate.Cfg;
using NHibernate.Dialect;
using NHibernate.Driver;

using System;
using System.Linq;
using System.Reflection;

namespace NHibernateDemoApp {

   class Program {
   
      static void Main(string[] args) {
         var cfg = new Configuration();
			
         String Data Source = asia13797\\sqlexpress;
         String Initial Catalog = NHibernateDemoDB;
         String Integrated Security = True;
         String Connect Timeout = 15;
         String Encrypt = False;
         String TrustServerCertificate = False;
         String ApplicationIntent = ReadWrite;
         String MultiSubnetFailover = False;
			
         cfg.DataBaseIntegration(x = > { x.ConnectionString = "Data Source + 
            Initial Catalog + Integrated Security + Connect Timeout + Encrypt +
            TrustServerCertificate + ApplicationIntent + MultiSubnetFailover";
         
                     
            x.Driver<SqlClientDriver>(); 
            x.Dialect<MsSql2008Dialect>();
         });
         
         cfg.AddAssembly(Assembly.GetExecutingAssembly());
         
         var sefact = cfg.BuildSessionFactory(); 
         
         using (var session = sefact.OpenSession()) {
         
            using (var tx = session.BeginTransaction()) {
               //perform database logic 
               tx.Commit();
            }
            
            Console.ReadLine(); 
         } 
      } 
   }
}

在连接字符串之后,我们需要提供一个驱动程序,这是 SQLClientDriver 然后我们还需要提供一个方言,哪个版本的SQL Server,我们将使用MS SQL 2008.

NHibernate现在知道如何连接数据库了.我们需要做的另一件事是为它提供一个我们将要映射的模型列表.

我们可以通过添加一个程序集来实现,所以通过指定 Assembly.GetExecutingAssembly 这是程序找到映射文件的地方.映射文件告诉NHibernate如何从C#类转到数据库表.

SessionFactory编译初始化NHibernate所需的所有元数据. SessionFactory可用于构建会话,这些会话大致类似于数据库连接.所以适当的方法是在using块中使用它.我可以说 var session 等于 sessionFactory.OpenSession ,我想在其交易中做这个.

一次会话打开后,我们可以告诉会话开始一个新的事务,然后我们可以在这里执行一些逻辑.因此,执行一些数据库逻辑,最后提交该事务.