使用代碼生成器生成Model類。
此處以簡單的UserInfo表作為示例。
注意字段前必須以virtual修飾。
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 結(jié)尾,并將其生成操作改為“嵌入的資源”,因為NHibernate會以這種方式尋找映射關(guān)系。
<?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類,作為生產(chǎn)和管理session的工廠。
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。
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的配置。
在控制臺項目中添加xml文件,名字為hibernate.cfg.xml 不可更改,并且修改為“如果較新則復(fù)制”。
新聞熱點
疑難解答