NHibernate
此條目可參照外語維基百科相應條目來擴充。 (2012年6月12日) |
此條目沒有列出任何參考或來源。 (2010年12月28日) |
當前版本 | 4.0.3(2015年1月20日 | )
---|---|
源代碼庫 | |
編程語言 | C Sharp |
操作系統 | 跨平台 |
許可協議 | GNU寬通用公共許可證 |
網站 | http://nhibernate.info |
NHibernate是一個面向.NET框架的對象關係映射解決方案。主要用來把對象模型表示的對象映射到基於SQL的關係模型數據結構中去。
NHibernate,顧名思義,如同NUnit,NAnt一樣,是基於.Net的Hibernate實現。
例子
這裡有程式碼片段,是要使用NHibernate將物件加入資料庫,和展示如何取得、修改、更新資料庫中的物件。
//Add a Customer to the datastore
//'sessionFactory' is a thread-safe object built once per application lifetime (can take seconds to build)
//based on configuration files which control how database tables are mapped to C# objects
//(e.g. which property maps to which column in a database table)
//
//'session' is not thread safe and fast to obtain and can be thought of as a connection to the database
using (var session = sessionFactory.OpenSession())
{
//transaction represents a db transaction
using (ITransaction transaction = session.BeginTransaction())
{
//The line below adds the customer to NHibernate's list of objects to insert to the database
//but it doesn't execute SQL insert command at this stage*.
//*if the Id field is generated by the database (e.g. an auto-incremented number)
//then NHibernate will execute SQL INSERT when .Save is called
session.Save(new Customer { Id = Guid.NewGuid(), FirstName = "Boss", Age = 50 });
//The call below will execute the SQL INSERT and commit the transaction
transaction.Commit();
}
}
//Retrieve the Customer from the database, modify the record and update the database
using (var session = sessionFactory.OpenSession())
{
using (ITransaction transaction = session.BeginTransaction())
{
//session's Query returns IQueryable<Customer>.
//Only when .FirstOrDefault is called will NHibernate execute the SQL query
Customer customer = session.Query<Customer>().Where(c => c.Token == token ).FirstOrDefault();
//Now the customer is 'part of' the 'session' object and NHibernate keeps track of changes
//made to it
if( customer != null )
{
//Changing a property of an object does NOT cause SQL to be executed
customer.TokenVerified = true;
//Committing the transaction results in an SQL UPDATE statement
//NHibernate kept track of the fact that 'customer' has been changed since loading
transaction.Commit();
}
}
}
NHibernate's configuration may affect when NHibernate executes SQL statements.