NHibernate - Konfiguration

In diesem Kapitel werden wir uns mit der NHibernate-Konfiguration befassen. Wir haben verschiedene Möglichkeiten, NHibernate zu konfigurieren. Es teilt sich in zwei Hauptgruppen

  • XML-basierte Konfiguration
  • Codebasierte Konfiguration

Codebasierte Konfiguration

Die codebasierte Konfiguration ist in NHibernate integriert. Es wurde rund um das NHibernate 3 eingeführt und wir haben bisher die Codebasis-Konfiguration verwendet.

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());

Alle Konfigurationen sind im C # -Code angegeben. Sie können hier sehen, dass wir unser neues Konfigurationsobjekt haben und es dann verwendenloquacious configurationDies wurde mit NHibernate 3.1 eingeführt, um die Datenbank zu konfigurieren. Welche Verbindungszeichenfolge wir verwenden, mit welcher Datenbank wir eine Verbindung herstellen und welchen Dialekt wir verwenden möchten. Wir fügen hier auch unsere Mapping-Assembly direkt hinzu.

XML-basierte Konfiguration

Wenn Sie eine XML-basierte Konfiguration verwenden, können Sie a verwenden hibernate.cfg.xml Datei, die nur eine eigenständige XML-Datei ist, die das NHibernate-Schema verwendet, oder Sie können diese NHibernate-spezifische Konfiguration in Ihre App oder einbetten web.cfg. Der Name hibernate.cfg.xml ist standardmäßig, aber wir können auch einen beliebigen Namen für diese XML-Datei verwenden.

Lassen Sie uns einen Blick auf die XML-basierte Konfiguration werfen, indem Sie dem NHibernateDemoApp-Projekt eine neue XML-Datei hinzufügen und sie hibernate.cfg.xml nennen.

Geben Sie die folgenden Informationen in die Datei hibernate.cfg.xml ein.

<?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>

Wie Sie in der obigen XML-Datei sehen können, haben wir dieselbe Konfiguration wie in C # angegeben angegeben.

Lassen Sie uns nun diese Konfiguration aus der Datei Program.cs kommentieren und einfach die aufrufen Configure() Methode, die die lädt hibernate.cfg.xml Datei wie unten gezeigt.

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("\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(); 
         } 
      } 
   } 
}

Lassen Sie uns Ihre Anwendung erneut ausführen und Sie werden dieselbe Ausgabe sehen.

Fetch the complete list again

1 Allan Bommer Excellent
2 Jerry Lewis Good