你的位置:首页 > ASP.net教程

[ASP.net教程]NHibernate使用简单示例


NHibernate使用小示例

1.新建Model类库项目。

使用代码生成器生成Model类。

此处以简单的UserInfo表作为示例。

注意字段前必须以 virtual 修饰。

namespace Model{  public partial class UserInfo  {    public virtual System.Int32 Id { get; set; }    public virtual System.String Name { get; set; }  }}

2.编写映射实体类与数据库的映射文件。

新建一个UserInfo.hbm.此处必须以 表名.hbm. 结尾,并将其生成操作改为“嵌入的资源”,因为NHibernate会以这种方式寻找映射关系。

<??><hibernate-mapping ="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>

3.新建一个DAL类库项目。

新建一个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。

4.新建一个UserInfoDAL类,实现对UserInfo数据的增删改查。

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;    }  }}

5.新建控制台测试项目调用

由于BLL和UI层不是本文重点,所以没有考虑依赖注入、分层、接口等,本文主要介绍是NHibernate的配置。

在控制台项目中添加hibernate.cfg. 不可更改,并且修改为“如果较新则复制”。