NHibernate – 入门
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,我们现在可以开始实现了。因此,我们将首先映射一个名为Student的非常简单的表,它只有一个名为 ID 的整数主键以及一个 FirstName 和 LastName 列。
我们需要一个类来代表这个学生,所以让我们通过右键单击解决方案资源管理器中的项目创建一个名为 Student 的新类,然后选择 Add → Class 这将打开 Add New Item 对话框。
在名称字段中输入Student.cs,单击添加按钮。在这个 Student 类中,我们需要有一个名为 ID 的整数主键,我们需要创建这个字符串、FirstName和LastName字段,如下面的 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 对象资源管理器中的数据库并选择属性。
它将打开“属性”窗口,现在向下滚动,您将在“属性”窗口中看到“连接字符串”字段。
复制连接字符串并在您的代码中指定。以下是我们需要配置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并且我想在它的事务中执行此操作。
一旦会话打开,我们可以告诉会话开始一个新的事务,然后我们可以在这里执行一些逻辑。因此,执行一些数据库逻辑并最终提交该事务。