NHibernate - Konfigurasi Override
Dalam bab ini, kami akan membahas cara mengganti konfigurasi NHibernate. Ada beberapa hal yang perlu Anda ingat.
Pertama-tama, konfigurasi di NHibernate adalah aditif.
Jadi Anda tidak hanya perlu menggunakan satu file xml atau Anda tidak hanya harus menggunakan konfigurasi berbasis kode atau NHibernate yang lancar.
Anda dapat mencampur dan mencocokkan semua metode ini tergantung pada bagaimana Anda ingin mengkonfigurasi aplikasi Anda.
Hal penting untuk diingat adalah bahwa, terakhir konfigurasi menang.
Dalam contoh berikut, Anda dapat melihat bahwa kita membuat objek konfigurasi kita, mengkonfigurasinya menggunakan konfigurasi berbasis kode dan terakhir memanggil cfg.configure() metode, yang memuat file 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();
Jadi apa pun di dalam hibernate.cfg.xml menimpa pengaturan yang ditetapkan oleh konfigurasi berbasis kode.
Dengan membalikkan kedua proses ini, kita dapat memiliki default di dalam hibernate.cfg.xml dan kemudian melakukan penggantian di dalam konfigurasi berbasis kode.
Tidak ada yang dikecualikan jika Anda menggunakan konfigurasi berbasis kode dan juga tidak ada yang mencegah Anda menggunakan file hibernate.cfg.xml.
Mari kita lihat contoh sederhana di mana kita akan mengganti konfigurasi dengan menggunakan campuran konfigurasi berbasis xml dan berbasis kode.
Mari kita juga memindahkan string koneksi ke app.config file menggunakan kode berikut.
<?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>
String koneksi ada di beberapa app.configfile dengan nama default. Sekarang, kita perlu menyebutkan nama default di file hibernate.cfg.xml alih-alih string koneksi.
<?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>
Mari mengomentari bagian string koneksi, driver, dan bagian dialek dari konfigurasi berbasis kode, karena program akan membacanya dari file hibernate.cfg.xml dan LogSqlInConsole bagian akan tetap dalam konfigurasi berbasis kode.
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();
}
}
}
}
Sekarang ketika Anda menjalankan aplikasi, Anda akan melihat bahwa program telah membaca log dari konfigurasi berbasis kode dan konfigurasi lain dari file 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
Jadi sekarang kami telah mendapatkan beberapa konfigurasi kami di dalam hibernate.cfg.xml file, beberapa di antaranya ada di dalam konfigurasi berbasis kode dan tergantung pada urutan panggilan berbasis kode versus configure(), kita dapat mengubah mana yang menimpa yang lain.