在本章中,我们将介绍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(); x.Dialect (); x.LogSqlInConsole = true; }); cfg.AddAssembly(Assembly.GetExecutingAssembly());
所有配置都在C#代码中指定.你可以在这里看到我们有了新的配置对象,然后我们使用NHibernate 3.1引入的 loquacious配置来配置数据库.我们正在使用什么连接字符串,我们连接的数据库和要使用的方言.我们还将映射程序集直接添加到此处.
基于XML的配置
如果您使用的是基于XML的配置,则可以使用 hibernate.cfg.xml 文件,它只是一个使用NHibernate架构的独立xml文件,或者您可以在应用程序或 web.cfg 中嵌入该NHibernate特定配置. hibernate.cfg.xml名称是默认的,但我们也可以为该xml文件使用任意名称.
让我们通过添加一个新的基于XML的配置来查看将xml文件发送到NHibernateDemoApp项目并将其命名为hibernate.cfg.xml.
在hibernate.cfg.xml文件中输入以下信息.
Data Source = asia13797\\sqlexpress; Initial Catalog = NHibernateDemoDB; Integrated Security = True; Connect Timeout = 15; Encrypt = False; TrustServerCertificate = False; ApplicationIntent = ReadWrite; MultiSubnetFailover = False; NHibernate.Driver.SqlClientDriver NHibernate.Dialect.MsSql2008Dialect
正如您在上面的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(); // x.Dialect (); // 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 ().List (); Console.WriteLine("\nFetch the complete list again\n"); foreach (var student in students) { Console.WriteLine("{0} \t{1} \t{2} \t{3}", student.ID, student.FirstName, student.LastName, student.AcademicStanding); } tx.Commit(); } Console.ReadLine(); } } }}
让我们再次运行您的应用程序,您将看到相同的输出.
Fetch the complete list again1 Allan Bommer Excellent2 Jerry Lewis Good