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.编写映射实体类与数据库的映射文件。
新建一个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>
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的配置。
在控制台项目中添加xml文件,名字为 hibernate.cfg.xml 不可更改,并且修改为“如果较新则复制”。