NHibernate使用简单示例

时间:2022-11-04 05:13:37

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 不可更改,并且修改为“如果较新则复制”。