NHibernate - Configuration

Dans ce chapitre, nous examinerons la configuration de NHibernate. Nous avons différentes façons de configurer NHibernate. Il se divise en deux groupes principaux

  • Configuration basée sur XML
  • Configuration basée sur le code

Configuration basée sur le code

La configuration basée sur le code est intégrée à NHibernate. Il a été introduit autour du NHibernate 3 et nous avons utilisé jusqu'à présent la configuration des bases de code.

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

Toutes les configurations sont spécifiées dans le code C #. Vous pouvez voir ici que nous avons notre nouvel objet de configuration, puis nous utilisonsloquacious configurationqui a été introduit avec NHibernate 3.1 pour configurer la base de données. Quelle chaîne de connexion nous utilisons, à quelle base de données nous nous connectons et le dialecte à utiliser. Nous ajoutons également notre assemblage de mappage directement ici.

Configuration basée sur XML

Si vous utilisez une configuration XML, vous pouvez utiliser un hibernate.cfg.xml , qui est juste un fichier xml autonome utilisant le schéma NHibernate, ou vous pouvez intégrer cette configuration spécifique NHibernate à l'intérieur de votre application ou web.cfg. Le nom hibernate.cfg.xml est par défaut, mais nous pouvons également utiliser un nom arbitraire pour ce fichier xml.

Examinons la configuration basée sur XML en ajoutant un nouveau fichier xml au projet NHibernateDemoApp et appelons-le hibernate.cfg.xml.

Entrez les informations suivantes dans le fichier 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>

Comme vous pouvez le voir dans le fichier xml ci-dessus, nous avons spécifié la même configuration que celle mentionnée dans le C #.

Maintenant, commentons cette configuration à partir du fichier Program.cs et appelons simplement le Configure() méthode, qui chargera le hibernate.cfg.xml fichier comme indiqué ci-dessous.

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

Exécutons à nouveau votre application et vous verrez le même résultat.

Fetch the complete list again

1 Allan Bommer Excellent
2 Jerry Lewis Good