使用代碼生成器生成Model類。數據庫
此處以簡單的UserInfo表做爲示例。session
注意字段前必須以 virtual 修飾。app
namespace Model { public partial class UserInfo { public virtual System.Int32 Id { get; set; } public virtual System.String Name { get; set; } } }
新建一個xml文件,而且命名爲 UserInfo.hbm.xml 此處必須以 表名.hbm.xml 結尾,並將其生成操做改成「嵌入的資源」,由於NHibernate會以這種方式尋找映射關係。測試
<?xml version="1.0" encoding="utf-8" ?> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Model" namespace="Model"> <class name="Model.UserInfo" table="UserInfo"> <id name="Id" column="Id" type="int"></id> <property name="Name" column="Name" type="string" /> </class> </hibernate-mapping>
新建一個NHibernateHelper類,做爲生產和管理Session的工廠。ui
namespace DAL { public class NHibernateHelper { private ISessionFactory _sessionFactory; public NHibernateHelper() { _sessionFactory = GetSessionFactory(); } private static ISessionFactory GetSessionFactory() { return (new Configuration()).Configure().BuildSessionFactory(); } public ISession GetSession() { return _sessionFactory.OpenSession(); } } }
保證每個NHibernate類的對象只有一個Session。spa
namespace DAL { public partial class UserInfoDAL { private ISession _isession; public UserInfoDAL() { _isession = new NHibernateHelper().GetSession(); } public void Add(UserInfo u) { _isession.Save(u); _isession.Flush(); } public bool Update(UserInfo u) { try { _isession.Update(u); _isession.Flush(); return true; } catch (Exception ex) { return false; } finally { _isession.Close(); } } public bool Delete(UserInfo u) { try { _isession.Delete(u); _isession.Flush(); return true; } catch (Exception ex) { return false; } finally { _isession.Close(); } } public UserInfo GetById(int id) { return _isession.Get<UserInfo>(id); } public IList<UserInfo> GetList() { IList<UserInfo> list = _isession.QueryOver<UserInfo>().List(); return list; } } }
因爲BLL和UI層不是本文重點,因此沒有考慮依賴注入、分層、接口等,本文主要介紹是NHibernate的配置。hibernate
在控制檯項目中添加xml文件,名字爲 hibernate.cfg.xml 不可更改,而且修改成「若是較新則複製」。code