NHibernate - Remplacer la configuration

Dans ce chapitre, nous expliquerons comment remplacer la configuration NHibernate. Il y a juste quelques points à garder à l'esprit.

  • Tout d'abord, la configuration dans NHibernate est additive.

  • Ainsi, vous ne devez pas simplement utiliser un seul fichier xml ou vous ne devez pas simplement utiliser la configuration basée sur le code ou NHibernate fluide.

  • Vous pouvez mélanger et assortir toutes ces méthodes en fonction de la façon dont vous souhaitez configurer votre application.

  • Le point important à retenir est que, enfin, la configuration gagne.

Dans l'exemple suivant, vous pouvez voir que nous créons notre objet de configuration, le configurons à l'aide de la configuration basée sur le code et enfin appelons le cfg.configure() méthode, qui charge le fichier hibernate.cfg.xml.

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();
  • Ainsi, tout ce qui se trouve à l'intérieur d'un hibernate.cfg.xml remplace les paramètres définis par la configuration basée sur le code.

  • En inversant ces deux processus, nous pouvons avoir les valeurs par défaut à l'intérieur de hibernate.cfg.xml, puis effectuer nos remplacements à l'intérieur d'une configuration basée sur du code.

  • Il n'y a rien qui exclut si vous utilisez une configuration basée sur le code et rien ne vous empêche d'utiliser le fichier hibernate.cfg.xml.

Jetons un coup d'œil à un exemple simple dans lequel nous remplacerons la configuration en utilisant un mélange de configuration basée sur xml et basée sur du code.

Déplaçons également la chaîne de connexion vers le app.config fichier en utilisant le code suivant.

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

La chaîne de connexion se trouve dans certains app.configfichier avec un nom par défaut. Maintenant, nous devons mentionner le nom par défaut dans le fichier hibernate.cfg.xml au lieu de la chaîne de connexion.

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

Commentons la partie chaîne de connexion, le pilote et la partie dialecte de la configuration basée sur le code, car le programme le lira à partir du fichier hibernate.cfg.xml et du fichier LogSqlInConsole partie restera dans la configuration basée sur le code.

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

Maintenant, lorsque vous exécutez l'application, vous verrez que le programme a lu le journal à partir de la configuration basée sur le code et d'autres configurations à partir du fichier hibernate.cfg.xml.

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

Alors maintenant, nous avons une partie de notre configuration à l'intérieur de notre hibernate.cfg.xml fichier, une partie se trouve à l'intérieur de la configuration basée sur le code et dépend de l'ordre d'appel basé sur le code par rapport à configure(), nous pouvons changer lequel d'entre eux l'emporte sur l'autre.