NHibernate - 入门

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

以下是使用 Visual Studio 中可用的项目模板创建项目的步骤。

步骤 1 − 打开 Visual Studio 并单击文件 → 新建 → 项目菜单选项。

步骤 2 − 打开一个新的项目对话框。

项目对话框

步骤 3 −从左侧窗格中,选择"模板"→ Visual C# → Windows。

步骤 4 − 在中间窗格中,选择"控制台应用程序"。

步骤 5 − 在"名称"字段中输入项目名称"NHibernateDemoApp",然后单击"确定"继续。

步骤 6 − 一旦 Visual Studio 创建了项目,您将看到解决方案资源管理器窗口中显示许多文件。

项目对话框

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

转到"工具"菜单并选择"NuGet 包管理器"→包管理器控制台,它将打开包管理器控制台窗口。

管理器控制台窗口

指定上面包管理器控制台窗口中显示的命令并按回车键,它将下载所有 NHibernate 依赖项并创建对所有所需程序集的引用。安装完成后,您将看到如下图所示的消息。

NHibernate 演示应用程序

现在我们已经添加了 NHibernate,我们现在可以开始实施了。因此,我们将从映射一个名为 Student 的非常简单的 开始,该表仅具有一个名为 ID 的整数主键以及 FirstName 和 LastName 列。

添加新项目

我们需要一个类来表示这个学生,因此让我们通过右键单击解决方案资源管理器中的项目来创建一个名为 Student 的新类,然后选择添加 → 类,这将打开添加新项目对话框。

添加新项目 NHibernate

在名称字段中输入 Student.cs,单击添加按钮。在这个 Student 类中,我们需要有一个名为 ID 的整数主键,并且我们需要创建这个字符串、FirstNameLastName 字段,如下面的 Student 类完整实现所示。

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 Object Explorer 中的数据库并选择"属性"。

SQL Server Object Explorer

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

属性窗口

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

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 可用于构建会话,这大致类似于数据库连接。因此,适当的方法是在使用块中使用它。我可以说 var session 等于 sessionFactory.OpenSession,并且我想在其事务内执行此操作。

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