6. 创建NHibernate映射文件
Nhibernate使用XML映射文件来映射POCO到数据库对象。虽然在很多案例中这可能是一对一关系,但这并不是必定的。
文件:SharedCode.hbm.xml
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class name="Fuli.Entity.Domain.SharedCode, Fuli.Entity" table="SharedCode">
<id name="Id" column="Id" type="Int64" unsaved-value="0">
<generator class="native"/>
</id>
<property name="Category" type="String" column="Category"/>
<property name="Text" type="String" column="Text"/>
<property name="Value" type="String" column="Value"/>
<property name="IsDefault" type="Boolean" column="IsDefault"/>
<property name="Description" type="String" column="Description"/>
<property name="ParentId" type="Int64" column="ParentId"/>
<property name="SortOrder" type="Int16" column="SortOrder"/>
</class>
</hibernate-mapping>
在hibernate-maping标签中,同时引用类集(POCOs)所属的程序集命名空间。
class元素表示到单个POCO的映射。name表示上面的程序集和命名空间中的类名,table属性告诉NHibernate数据库中的哪个表或者视图将被映射。 id元素告诉NHibernate哪个数据库的字段和对应的对象作为一个唯一键来使用。在本例中,我们使用Id这个字段。 generator元素告诉NHibernate怎样给新实体来创建唯一ID。 property标签是见得最多的标签。它简单地映射一个到数据表或者视图中对应字段的映射。一旦XML文件创建好了,需要更改XML的生成方式确保它被设置为嵌入式资源,否则NHibernate不会读取这个XML文件,那么映射就不会生效了。

图2 映射文件必须是嵌入的资源
7. 使用 NHibernate连接数据库
文件:CommonRepository
namespace Fuli.DAL.SQLServerImpl
{
public class CommonRepository : ICommonRepository
{
#region 新增
/// <summary>
/// 新增实体表
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
public long AddNewEntity<T>(object obj, string tableName) where T : new()
{
long id = 0;
try
{
using (ISession session = NHibernateHelper.OpenSession())
{
id = long.Parse(session.Save((T)obj).ToString());
session.Flush();
}
}
catch (Exception ex)
{
LogHelper.GetInstance().WriteMessage(tableName + OperationType.COMMA + ex.ToString());
}
return id;
}
/// <summary>
/// 新增实体表
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
public TReturn AddNewEntity<TEntity, TReturn>(object entity, string tableName) where TEntity : new()
{
TReturn returnValue = default(TReturn);
try
{
using (ISession session = NHibernateHelper.OpenSession())
{
object returnObject = session.Save(entity);
if (returnObject != null)
{
returnValue = (TReturn)Convert.ChangeType(returnObject, typeof(TReturn));
}
session.Flush();
}
}
catch (Exception ex)
{
LogHelper.GetInstance().WriteMessage(tableName + OperationType.COMMA + ex.ToString());
}
return returnValue;
}
#endregion 新增
}
}










