NHibernate - Cấu hình
Trong chương này, chúng ta sẽ xem xét cấu hình NHibernate. Chúng tôi có nhiều cách khác nhau để có thể cấu hình NHibernate. Nó chia thành hai nhóm chính
- Cấu hình dựa trên XML
- Cấu hình dựa trên mã
Cấu hình dựa trên mã
Cấu hình dựa trên mã được tích hợp trong NHibernate. Nó đã được giới thiệu xung quanh NHibernate 3 và chúng tôi đã sử dụng cấu hình cơ sở mã cho đến nay.
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());
Tất cả các cấu hình được chỉ định trong mã C #. Bạn có thể thấy ở đây rằng chúng tôi đã có đối tượng cấu hình mới và sau đó chúng tôi sử dụngloquacious configurationđã được giới thiệu với NHibernate 3.1 để cấu hình cơ sở dữ liệu. Chúng tôi đang sử dụng chuỗi kết nối nào, cơ sở dữ liệu nào chúng tôi đang kết nối và phương ngữ sẽ sử dụng. Chúng tôi cũng thêm trực tiếp tổ hợp ánh xạ của mình vào đây.
Cấu hình dựa trên XML
Nếu bạn đang sử dụng cấu hình dựa trên XML, bạn có thể sử dụng hibernate.cfg.xml , chỉ là một tệp xml độc lập sử dụng lược đồ NHibernate hoặc bạn có thể nhúng cấu hình NHibernate cụ thể đó vào bên trong ứng dụng của mình hoặc web.cfg. Tên hibernate.cfg.xml là theo mặc định, nhưng chúng ta cũng có thể sử dụng tên tùy ý cho tệp xml đó.
Hãy xem xét cấu hình dựa trên XML bằng cách thêm một tệp xml mới vào dự án NHibernateDemoApp và gọi nó là hibernate.cfg.xml.
Nhập thông tin sau vào tệp 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>
Như bạn có thể thấy trong tệp xml ở trên, chúng tôi đã chỉ định cấu hình tương tự như đã đề cập trong C #.
Bây giờ, hãy nhận xét về cấu hình này từ tệp Program.cs và chỉ cần gọi Configure() phương pháp này sẽ tải hibernate.cfg.xml tập tin như hình dưới đây.
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();
}
}
}
}
Hãy chạy lại ứng dụng của bạn và bạn sẽ thấy kết quả tương tự.
Fetch the complete list again
1 Allan Bommer Excellent
2 Jerry Lewis Good