实例中解决方案简单的创建三层架构,符合开发过程中最简单的运用;

1:首先在数据库中创建一个表T_School,脚本如下:

USE [TestDb]
GO
/****** 对象: Table [dbo].[T_School] 脚本日期: 03/01/2014 19:45:45 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[T_School](
[ID] [uniqueidentifier] NOT NULL,
[SchoolName] [nvarchar](255) COLLATE Chinese_PRC_CI_AS NULL,
[BuildDate] [datetime] NULL,
[Address] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[IsSenior] [bit] NULL,
[StudentNum] [int] NULL
) ON [PRIMARY]

2:创建实体层Model,实体中的字段还以virtual进行修饰

namespace Wujy.ModelLibrary.Entity
{
public class SchoolModel
{
/// <summary>
/// ID
/// </summary>
public virtual Guid ID
{
get;
set;
}
/// <summary>
/// SchoolName
/// </summary>
public virtual string SchoolName
{
get;
set;
}
/// <summary>
/// BuildDate
/// </summary>
public virtual DateTime? BuildDate
{
get;
set;
}
/// <summary>
/// Address
/// </summary>
public virtual string Address
{
get;
set;
}
/// <summary>
/// 高级
/// </summary>
public virtual bool IsSenior
{
get;
set;
}
/// <summary>
/// 人数
/// </summary>
public virtual int? StudentNum
{
get;
set;
}
}
}

2.1 此处还增加NHibernate需要的XML映射文件,以实体名+hbm.xml结尾并且还要设置其生成操作为"嵌入的资源";其中Class中的name是指实体类的完整名及类库名称,代码如下

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Maticsoft" namespace="Maticsoft">
<class name="Wujy.ModelLibrary.Entity.SchoolModel, Wujy.ModelLibrary" table="T_School">
<id name="ID" column="ID" type="Guid"></id>
<property name="SchoolName" column="SchoolName" type="string" />
<property name="BuildDate" column="BuildDate" type="DateTime" />
<property name="Address" column="Address" type="string" />
<property name="IsSenior" column="IsSenior" type="bool" />
<property name="StudentNum" column="StudentNum" type="int" />
</class>
</hibernate-mapping>

3:创建一个类库作为DAL层,此处我们引用NHibernate两个DLL,分别为NHibernate.dll及Iesi.Collection.dll;此处创建一个帮助类NHibernateHelper用于ISessionFactory;

using NHibernate;
using NHibernate.Cfg; namespace Wujy.DalLibrary.DalHelp
{
public class NHibernateHelper
{
private ISessionFactory _sessionFactory;
public NHibernateHelper()
{
_sessionFactory = GetSessionFactory();
}
private ISessionFactory GetSessionFactory()
{
return (new Configuration()).Configure().BuildSessionFactory();
}
public ISession GetSession()
{
return _sessionFactory.OpenSession();
}
}
}

3.1:创建类SchoolDal并把一些操作的代码写入,如查不用transaction.Commit()则要运和isession.Flush()否则无法执行SQL就没有效果:

using Wujy.ModelLibrary.Entity;
using NHibernate;
using Wujy.DalLibrary.DalHelp; namespace Wujy.DalLibrary
{
public class SchoolDal
{
private ISession isession; public SchoolDal()
{
isession = new NHibernateHelper().GetSession();
} public void Add(SchoolModel model)
{
//如查不用transaction.Commit()则要运和isession.Flush()否则无法执行SQL就没有效果
//ITransaction transaction = isession.BeginTransaction();
//isession.Save(model);
//transaction.Commit();
isession.Save(model);
isession.Flush();
} public bool Update(SchoolModel model)
{
try
{
isession.Update(model);
isession.Flush();
return true;
}
catch (Exception ex)
{
return false;
}
finally
{
isession.Close();
}
} public bool Delete(SchoolModel model)
{
try
{
isession.Delete(model);
isession.Flush();
return true;
}
catch (Exception ex)
{
return false;
}
finally
{
isession.Close();
}
} public SchoolModel GetSchoolById(Guid ID)
{
return isession.Get<SchoolModel>(ID);
} public IList<SchoolModel> GetSchoolList()
{
IList<SchoolModel> list = null;
list = isession.QueryOver<SchoolModel>().List();
return list;
}
}
}

4:因为本实例重点是对NHibernate运用,对于逻辑层就简单的引用;代码也很简单:

using Wujy.ModelLibrary.Entity;
using Wujy.DalLibrary; namespace Wujy.BllLibrary
{
public class SchoolBll
{
public static void Add(SchoolModel model)
{
new SchoolDal().Add(model);
} public static bool Update(SchoolModel model)
{
return new SchoolDal().Update(model);
} public static bool Delete(SchoolModel model)
{
return new SchoolDal().Delete(model);
} public static SchoolModel GetSchoolById(Guid ID)
{
return new SchoolDal().GetSchoolById(ID);
} public static IList<SchoolModel> GetSchoolList()
{
return new SchoolDal().GetSchoolList();
}
}
}

5:WebUI除简单调用BLL层外,另一个比较重要是NHibernate连接数据库的配置文件,其中其属性复制到输出目录改为"始终复制";Hibernate.cfg.xml内容:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory name="NHibernateConfig">
<property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
<property name="connection.connection_string">Server=localhost;uid=sa;password=admin;database=TestDb</property>
<property name="dialect">NHibernate.Dialect.MsSql2005Dialect</property>
<property name="command_timeout">10</property>
<mapping assembly="Wujy.ModelLibrary"/><!--表示映射Wujy.ModelLibrary实体程序集下的所有类,就不用一个个去映射-->
</session-factory>
</hibernate-configuration>

最新文章

  1. 【UWP开源】图片编辑器,带贴图、滤镜、涂鸦等功能
  2. XPath
  3. FLEX SharedObject介绍及应用
  4. 验证码(网页的某些图片)在ie 360不显示,在火狐下显示正常
  5. [转]C# WinForm treeview checkbox----递归算法利用
  6. hdu3072 强连通+最小树形图
  7. IAR修改工程名称Tab键设置模板建立
  8. c# 代理IP获取通用方法
  9. python: list[-1] 与 list[-1:] 的区别
  10. SQL日期形式转换
  11. WCF技术剖析之十一:异步操作在WCF中的应用(上篇)
  12. find your present (2) 2095
  13. 《Qt on Android核心编程》介绍
  14. UnicodeEncodeError: &#39;gbk&#39; codec can&#39;t encode character &#39;\xa0&#39; in position 1987: illegal multibyte sequence
  15. Linux之Shell命令
  16. Vue Document
  17. Promise-async-await处理函数
  18. java之XML
  19. angularjs学习第六天笔记(指令简介学习)
  20. Docker 使用Docker知识简易部署一个LNMP平台

热门文章

  1. python ipython notebook或者 jupyter notebook 的安装
  2. 算法题14 小Q歌单,牛客网,腾讯笔试题
  3. 《UNI|X环境高级编程》 源代码配置
  4. C# 获取MD5值
  5. Python编程-网络编程
  6. java 程序的使用
  7. Cisco学习笔记
  8. UVA639 二叉树
  9. 多校HDU5723 最小生成树+dfs回溯
  10. mac下查看占用端口的进程及杀死进程