NHibernate - ไฮเบอร์เนตคล่องแคล่ว
ในบทนี้เราจะพูดถึง NHibernate ที่คล่องแคล่ว Fluent NHibernate เป็นอีกวิธีหนึ่งในการทำแผนที่หรือคุณสามารถพูดได้ว่าเป็นอีกทางเลือกหนึ่งสำหรับไฟล์การแมป XML มาตรฐานของ NHibernate แทนที่จะเขียน XML(.hbm.xml files)เอกสาร. ด้วยความช่วยเหลือของ Fluent NHibernate คุณสามารถเขียนการแมปด้วยรหัส C # ที่พิมพ์มาก
ในการแมป Fluent NHibernate จะรวบรวมพร้อมกับแอปพลิเคชันที่เหลือของคุณ
คุณสามารถเปลี่ยนการแมปของคุณได้อย่างง่ายดายเช่นเดียวกับรหัสแอปพลิเคชันของคุณและคอมไพเลอร์จะล้มเหลวในการพิมพ์ผิดใด ๆ
มีระบบการกำหนดค่าแบบเดิมซึ่งคุณสามารถระบุรูปแบบสำหรับการลบล้างหลักการตั้งชื่อและสิ่งอื่น ๆ อีกมากมาย
คุณยังสามารถตั้งค่าว่าจะตั้งชื่อสิ่งต่างๆได้อย่างไรจากนั้น Fluent NHibernate จะจัดการส่วนที่เหลือ
มาดูตัวอย่างง่ายๆด้วยการสร้างโครงการคอนโซลใหม่ ในบทนี้เราจะใช้ฐานข้อมูลอย่างง่ายซึ่งเรามีตารางลูกค้าอย่างง่ายดังที่แสดงในภาพต่อไปนี้

ติดตั้ง Fluent NHibernate
ขั้นตอนแรกคือการเริ่ม Fluent NHibernate คือการติดตั้งแพ็คเกจ Fluent NHibernate ดังนั้นเปิดไฟล์NuGet Package Manager Console และป้อนคำสั่งต่อไปนี้
PM> install-package FluentNHibernate
เมื่อติดตั้งสำเร็จคุณจะเห็นข้อความต่อไปนี้

มาเพิ่มคลาสโมเดลแบบง่ายๆของลูกค้าและโปรแกรมต่อไปนี้จะแสดงการใช้คลาสลูกค้า
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace FluentNHibernateDemo {
class Customer {
public virtual int Id { get; set; }
public virtual string FirstName { get; set; }
public virtual string LastName { get; set; }
}
}
ตอนนี้เราต้องสร้างแผนที่โดยใช้ NHibernate ที่คล่องแคล่วดังนั้นเพิ่มอีกหนึ่งคลาส CustomerMapในโครงการของคุณ นี่คือการนำคลาส CustomerMap ไปใช้งาน
using FluentNHibernate.Mapping;
using System;
using System.Collections.Generic;
using System.Linq; using System.Text;
using System.Threading.Tasks;
namespace FluentNHibernateDemo {
class CustomerMap : ClassMap<Customer> {
public CustomerMap() {
Id(x => x.Id);
Map(x => x.FirstName);
Map(x => x.LastName);
Table("Customer");
}
}
}
ขอเพิ่มอีกชั้น NHibernateHelper ซึ่งเราจะตั้งค่าการกำหนดค่าต่างๆ
using FluentNHibernate.Cfg;
using FluentNHibernate.Cfg.Db;
using NHibernate;
using NHibernate.Tool.hbm2ddl;
namespace FluentNHibernateDemo {
public class NHibernateHelper {
private static ISessionFactory _sessionFactory;
private static ISessionFactory SessionFactory {
get {
if (_sessionFactory == null)
InitializeSessionFactory(); return _sessionFactory;
}
}
private static void InitializeSessionFactory() {
_sessionFactory = Fluently.Configure()
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;
.Database(MsSqlConfiguration.MsSql2008 .ConnectionString(
@"Data Source + Initial Catalog + Integrated Security + Connect Timeout
+ Encrypt + TrustServerCertificate + ApplicationIntent +
MultiSubnetFailover") .ShowSql() )
.Mappings(m => m.FluentMappings
.AddFromAssemblyOf<Program>())
.ExposeConfiguration(cfg => new SchemaExport(cfg)
.Create(true, true))
.BuildSessionFactory();
}
public static ISession OpenSession() {
return SessionFactory.OpenSession();
}
}
}
ตอนนี้ขอย้ายไปที่ Program.cs ไฟล์ที่เราจะเริ่มเซสชันจากนั้นสร้างลูกค้าใหม่และบันทึกลูกค้านั้นลงในฐานข้อมูลดังที่แสดงด้านล่าง
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace FluentNHibernateDemo {
class Program {
static void Main(string[] args) {
using (var session = NHibernateHelper.OpenSession()) {
using (var transaction = session.BeginTransaction()) {
var customer = new Customer {
FirstName = "Allan",
LastName = "Bomer"
};
session.Save(customer);
transaction.Commit();
Console.WriteLine("Customer Created: " + customer.FirstName + "\t" +
customer.LastName);
}
Console.ReadKey();
}
}
}
}
ลองเรียกใช้แอปพลิเคชันของคุณและคุณจะเห็นผลลัพธ์ต่อไปนี้
if exists (select * from dbo.sysobjects where id = object_id(N'Customer') and
OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table Customer
create table Customer (
Id INT IDENTITY NOT NULL,
FirstName NVARCHAR(255) null,
LastName NVARCHAR(255) null,
primary key (Id)
)
NHibernate: INSERT INTO Customer (FirstName, LastName) VALUES (@p0, @p1);
select SCOPE_IDENTITY();@p0 = 'Allan' [Type: String (4000)],
@p1 = 'Bomer' [Type: String (4000)]
Customer Created: Allan Bomer
อย่างที่คุณเห็นลูกค้าใหม่ถูกสร้างขึ้น หากต้องการดูบันทึกลูกค้าให้ไปที่ฐานข้อมูลและดูข้อมูลและคุณจะเห็นว่ามีการเพิ่มลูกค้า 1 ราย
