NHibernate - Yapılandırmayı Geçersiz Kıl

Bu bölümde, NHibernate yapılandırmasının nasıl geçersiz kılınacağını ele alacağız. Aklınızda tutmanız gereken birkaç şey var.

  • Her şeyden önce, NHibernate'deki konfigürasyon katkı maddesidir.

  • Yani sadece tek bir xml dosyası kullanmak zorunda değilsiniz veya sadece kod tabanlı yapılandırmayı veya akıcı NHibernate kullanmak zorunda değilsiniz.

  • Uygulamanızı nasıl yapılandırmak istediğinize bağlı olarak tüm bu yöntemleri karıştırıp eşleştirebilirsiniz.

  • Unutulmaması gereken önemli nokta, son olarak konfigürasyonun kazanacağıdır.

Aşağıdaki örnekte, yapılandırma nesnemizi oluşturduğumuzu, kod tabanlı yapılandırmayı kullanarak yapılandırdığımızı ve son olarak cfg.configure() hibernate.cfg.xml dosyasını yükleyen yöntem.

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.Configure();
  • Dolayısıyla, bir hibernate.cfg.xml içindeki herhangi bir şey, kod tabanlı konfigürasyon tarafından belirlenen ayarları geçersiz kılar.

  • Bu iki işlemi tersine çevirerek, varsayılanları hibernate.cfg.xml içinde alabilir ve ardından kod tabanlı bir yapılandırmanın içinde geçersiz kılmalarımızı yapabiliriz.

  • Kod tabanlı yapılandırma kullanıyorsanız dışlayan hiçbir şey yoktur ve ayrıca hibernate.cfg.xml dosyasını kullanmanızı engelleyen hiçbir şey yoktur.

Yapılandırmayı xml tabanlı ve kod tabanlı yapılandırmanın bir karışımını kullanarak geçersiz kılacağımız basit bir örneğe bakalım.

Bağlantı dizesini de app.config aşağıdaki kodu kullanarak dosya.

<?xml version = "1.0" encoding = "utf-8" ?> 

<configuration> 
   
   <startup> 
      <supportedRuntime version = "v4.0" sku = ".NETFramework,Version = v4.5" /> 
   </startup> 
   
   <connectionStrings> 
      <add name = "default" connectionString = "Data Source =
         asia13797\\sqlexpress;
         Initial Catalog = NHibernateDemoDB;
         Integrated Security = True;
         Connect Timeout = 15;
         Encrypt = False;
         TrustServerCertificate = False;
         ApplicationIntent = ReadWrite;
         MultiSubnetFailover = False"/> 
   </connectionStrings> 

</configuration>

Bağlantı dizesi bazılarında oturuyor app.configvarsayılan bir ada sahip dosya. Şimdi, hibernate.cfg.xml dosyasında bağlantı dizesi yerine varsayılan adı belirtmemiz gerekiyor.

<?xml version = "1.0" encoding = "utf-8" ?> 
<hibernate-configuration xmlns = "urn:nhibernate-configuration-2.2"> 

   <session-factory> 
      <property name = "connection.connection_string">default</property> 
		
      <property name = "connection.driver_class">
         NHibernate.Driver.SqlClientDriver
      </property> 
		
      <property name = "dialect">
         NHibernate.Dialect.MsSql2008Dialect
      </property> 
		
      <mapping assembly = "NHibernateDemoApp"/> 
   </session-factory> 

</hibernate-configuration>

Kod tabanlı yapılandırmanın bağlantı dizesi kısmı, sürücüsü ve lehçe kısmı hakkında yorum yapalım, çünkü program onu ​​hibernate.cfg.xml dosyasından ve LogSqlInConsole bölümü kod tabanlı yapılandırmada kalacaktır.

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();
			
         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.Configure(); 
         cfg.AddAssembly(Assembly.GetExecutingAssembly()); 
         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(); 
         } 
      } 
   } 
}

Artık uygulamayı çalıştırdığınızda, programın günlüğü kod tabanlı yapılandırmadan ve diğer yapılandırmadan hibernate.cfg.xml dosyasından okuduğunu göreceksiniz.

NHibernate: SELECT this_.ID as ID0_0_, this_.LastName as LastName0_0_,   
   this_.FirstMidName as FirstMid3_0_0_, this_.AcademicStanding as Academic4_0_0_ FROM
   Student this_

Fetch the complete list again
1 Allan Bommer Excellent
2 Jerry Lewis Good

Şimdi yapılandırmamızın bir kısmına sahibiz. hibernate.cfg.xml dosyasında, bazıları kod tabanlı yapılandırmanın içindedir ve kod tabanlı çağrıya karşı kod tabanlı arama sırasına bağlıdır. configure(), hangisinin diğerini geçersiz kıldığını değiştirebiliriz.