NHibernate - 配置

在本章中,我们将介绍 NHibernate 配置。我们可以通过不同的方式配置 NHibernate。它分为两大类

  • 基于 XML 的配置
  • 基于代码的配置

基于代码的配置

基于代码的配置内置于 NHibernate 中。它是在 NHibernate 3 左右引入的,到目前为止我们一直在使用代码库配置。

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>(); 
   x.LogSqlInConsole = true; 
}); 

cfg.AddAssembly(Assembly.GetExecutingAssembly());

所有配置均在 C# 代码中指定。您可以在此处看到,我们已获得新的配置对象,然后我们使用 NHibernate 3.1 中引入的 loquacious 配置 来配置数据库。我们使用的连接字符串、连接的数据库以及要使用的方言。我们还将映射程序集直接添加到此处。

基于 XML 的配置

如果您使用基于 XML 的配置,则可以使用 hibernate.cfg.xml 文件,它只是一个使用 NHibernate 模式的独立 xml 文件,或者您可以将该 NHibernate 特定配置嵌入到您的应用程序或 web.cfg 中。 hibernate.cfg.xml 是默认名称,但我们也可以为该 xml 文件使用任意名称。

让我们通过向 NHibernateDemoApp 项目添加一个新的 xml 文件并将其命名为 hibernate.cfg.xml 来查看基于 XML 的配置。

在 hibernate.cfg.xml 文件中输入以下信息。

<?xml version = "1.0" encoding = "utf-8" ?> 
<hibernate-configuration xmlns = "urn:nhibernate-configuration-2.2"> 
   <session-factory> 
   
      <property name = "connection.connection_string">
         Data Source = asia13797\sqlexpress;
         Initial Catalog = NHibernateDemoDB;
         Integrated Security = True;
         Connect Timeout = 15;
         Encrypt = False;
         TrustServerCertificate = False;
         ApplicationIntent = ReadWrite;
         MultiSubnetFailover = False;
      </property> 
      
      <property name = "connection.driver_class">
         NHibernate.Driver.SqlClientDriver
      </property> 
		
      <property name = "dialect">
         NHibernate.Dialect.MsSql2008Dialect
      </property> 
		
      <mapping assembly = "NHibernateDemoApp"/>
		
   </session-factory> 
	
</hibernate-configuration>

如您在上面的 xml 文件中看到的,我们指定了与 C# 中提到的相同的配置。

现在让我们从 Program.cs 文件中注释此配置,然后调用 Configure() 方法,该方法将加载 hibernate.cfg.xml 文件,如下所示。

using HibernatingRhinos.Profiler.Appender.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) { 
		
         NHibernateProfiler.Initialize(); 
         var cfg = new Configuration(); 
         
         //cfg.DataBaseIntegration(x =>
         
         //{ 
            // x.ConnectionString = "Data Source = asia13797;\sqlexpress
            Initial Catalog = NHibernateDemoDB;
            Integrated Security = True;
            Connect Timeout = 15;
            Encrypt =False;
            TrustServerCertificate = False;
            ApplicationIntent = ReadWrite;
            MultiSubnetFailover = False"; 
            
            // x.Driver<SqlClientDriver>(); 
            // x.Dialect<MsSql2008Dialect>(); 
            // x.LogSqlInConsole = true; 
         //}); 
         
         //cfg.AddAssembly(Assembly.GetExecutingAssembly());
			
         cfg.Configure();
         var sefact = cfg.BuildSessionFactory();
			
         using (var session = sefact.OpenSession()) { 
            
            using (var tx = session.BeginTransaction()) { 
               var students = session.CreateCriteria<Student>().List<Student>(); 
               Console.WriteLine("
Fetch the complete list again
"); 
               
               foreach (var student in students) { 
                  Console.WriteLine("{0} 	{1} 	{2} 	{3}", student.ID,
                     student.FirstName, student.LastName, student.AcademicStanding); 
               } 
					
               tx.Commit(); 
            } 
				
            Console.ReadLine(); 
         } 
      } 
   } 
}

让我们再次运行您的应用程序,您将看到相同的输出。

Fetch the complete list again

1 Allan Bommer Excellent
2 Jerry Lewis Good