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.