📜  NHibernate-入门

📅  最后修改于: 2020-11-19 05:31:15             🧑  作者: Mango


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

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

步骤1-打开Visual Studio,然后单击文件→新建→项目菜单选项。

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

项目对话框

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

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

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

步骤6 -Visual Studio创建项目后,您将在“解决方案资源管理器”窗口中看到许多文件。

项目对话框

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

进入“工具”菜单,然后选择“ NuGet软件包管理器”→“软件包管理器控制台”,它将打开“软件包管理器控制台”窗口。

管理器控制台窗口

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

NHibernate演示应用

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

新增项目

我们需要一个代表该学生的课程,因此让我们通过在解决方案资源管理器中的项目上单击鼠标右键,然后选择Add→Class来创建一个名为Student的新课程,这将打开Add New Item对话框。

添加新项目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对象资源管理器数据库上点击右键,选择属性。

SQL Server对象资源管理器

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

属性窗口

复制连接字符串并在代码中指定。以下是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(); 
            x.Dialect();
         });
         
         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 ,我将要在其事务内执行此操作。

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