NHibernate - Konfiguracja

W tym rozdziale przyjrzymy się konfiguracji NHibernate. Mamy różne sposoby konfiguracji NHibernate. Dzieli się na dwie główne grupy

  • Konfiguracja oparta na XML
  • Konfiguracja oparta na kodzie

Konfiguracja oparta na kodzie

Konfiguracja oparta na kodzie jest wbudowana w NHibernate. Został on wprowadzony wokół NHibernate 3 i do tej pory używaliśmy konfiguracji baz kodu.

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

Wszystkie konfiguracje są określone w kodzie C #. Widać tutaj, że mamy nasz nowy obiekt konfiguracyjny, a następnie używamyloquacious configurationktóry został wprowadzony wraz z NHibernate 3.1 w celu skonfigurowania bazy danych. Jakich parametrów połączenia używamy, do jakiej bazy danych się łączymy i jakiego dialektu użyć. Dodajemy również nasz zespół mapujący bezpośrednio tutaj.

Konfiguracja oparta na języku XML

Jeśli używasz konfiguracji opartej na języku XML, możesz użyć pliku hibernate.cfg.xml plik, który jest po prostu samodzielnym plikiem xml używającym schematu NHibernate lub możesz osadzić tę specyficzną konfigurację NHibernate w swojej aplikacji lub web.cfg. Nazwa hibernate.cfg.xml jest domyślna, ale możemy również użyć dowolnej nazwy dla tego pliku xml.

Przyjrzyjmy się konfiguracji opartej na XML, dodając nowy plik xml do projektu NHibernateDemoApp i nazwijmy go hibernate.cfg.xml.

Wprowadź następujące informacje do pliku 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>

Jak widać w powyższym pliku xml, określiliśmy tę samą konfigurację, jak wspomniano w C #.

Teraz skomentujmy tę konfigurację z pliku Program.cs i po prostu wywołaj Configure() metoda, która załaduje plik hibernate.cfg.xml plik, jak pokazano poniżej.

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

Uruchommy ponownie aplikację, a zobaczysz to samo wyjście.

Fetch the complete list again

1 Allan Bommer Excellent
2 Jerry Lewis Good