·您现在的位置: 云翼网络 >> 文章中心 >> 网站建设 >> 网站建设开发 >> ASP.NET网站开发 >> NHibernate使用简单示例
使用代码生成器生成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 结尾,并将其生成操作改为“嵌入的资源”,因为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的工厂。
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 不可更改,并且修改为“如果较新则复制”。