什么是Nhibernate,Nhibernate是一个面向.Net环境的对 象/关系数据库映射工具。(ORM)

1、搭建项目基本框架:

(1)创建MVC项目,命名为NHShop.Web。

(2)依次分别新建3个类库项目:NHShop.Domain,NHShop.Data,NHShop.Business。此项目采用传统三层架构:

NHShop.Data引用Iesi.Collections.dll、NHibernate.dll和类库NHShop.Domain。

NHShop.Business引用类库NHShop.Domain和NHShop.Data。

NHShop.Web需引用Iesi.Collections.dll、NHibernate.dll和类库NHShop.Domain、NHShop.Business。

2、配置数据库连接信息:

打开packages文件夹,找到NHibernate.4.1.1.4000文件夹下的ConfigurationTemplates文件夹,复制MSSQL.cfg.xml到NHShop.Web跟目录,并重命名为hibernate.xml,注意将部分property改为id

修改hibernate.xml,修改数据库实例名,并添加mapping节点,修改后如下:

<?xml version="1.0" encoding="utf-8"?>
<!--
This template was written to work with NHibernate.Test.
Copy the template to your NHibernate.Test project folder and rename it in hibernate.cfg.xml and change it
for your own use before compile tests in VisualStudio.
-->
<!-- This is the System.Data.dll provider for SQL Server -->
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2" >
<session-factory name="NHibernate.Test">
<!--定制数据库IDriver的类型-->
<property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
<!--连接字符串-->
<property name="connection.connection_string">
Server=WYT\SQLEXPRESS;database=Northwind;uid=sa;pwd=
</property>
<!--NHibernate方言(Dialect)的类名-可以让NHibernate使用某些特定的数据库平台的特性-->
<property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property>
<!--映射文档中所在的程序集-->
<mapping assembly="NHShop.Domain" />
</session-factory>
</hibernate-configuration>

3、修改hibernate.xml的属性为:如果比较则复制

4、单例模式编写NHibernateHelper辅助类NHibernateHelper:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using NHibernate;
using NHibernate.Cfg; namespace NHShop.Data
{
public class NHibernateHelper
{
private static ISessionFactory _sessionFactory; /// <summary>
/// 创建ISessionFactory
/// </summary>
public static ISessionFactory SessionFactory
{
get {
//配置ISessionFactory
return _sessionFactory==null?(new Configuration()).Configure().BuildSessionFactory():_sessionFactory;
}
}
}
}

5、NHShop.Domain利用动软代码生成器生成持久化类Customers:

using System;

//Nhibernate Code Generation Template 1.0
//author:MythXin
//blog:www.cnblogs.com/MythXin
//Entity Code Generation Template
namespace NHShop.Domain.Entities
{
//Customers
public class Customers
{ /// <summary>
/// CustomerID
/// </summary>
public virtual string CustomerID
{
get;
set;
}
/// <summary>
/// CompanyName
/// </summary>
public virtual string CompanyName
{
get;
set;
}
/// <summary>
/// ContactName
/// </summary>
public virtual string ContactName
{
get;
set;
}
/// <summary>
/// ContactTitle
/// </summary>
public virtual string ContactTitle
{
get;
set;
}
/// <summary>
/// Address
/// </summary>
public virtual string Address
{
get;
set;
}
/// <summary>
/// City
/// </summary>
public virtual string City
{
get;
set;
}
/// <summary>
/// Region
/// </summary>
public virtual string Region
{
get;
set;
}
/// <summary>
/// PostalCode
/// </summary>
public virtual string PostalCode
{
get;
set;
}
/// <summary>
/// Country
/// </summary>
public virtual string Country
{
get;
set;
}
/// <summary>
/// Phone
/// </summary>
public virtual string Phone
{
get;
set;
}
/// <summary>
/// Fax
/// </summary>
public virtual string Fax
{
get;
set;
} }
}

6、NHShop.Domain利用动软代码生成器生成映射文件:Customers.hbm.xml,并给文件设置属性:嵌入的资源

<?xml version="1.0"  encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="NHShop.Domain" namespace="NHShop.Domain.Entities">
<!--类的全称、程序集、数据库表名称-->
<class name="NHShop.Domain.Entities.Customers, NHShop.Domain" table="Customers"> <id name="CustomerID" column="CustomerID" type="string" />
<property name="CompanyName" column="CompanyName" type="string" />
<property name="ContactName" column="ContactName" type="string" />
<property name="ContactTitle" column="ContactTitle" type="string" />
<property name="Address" column="Address" type="string" />
<property name="City" column="City" type="string" />
<property name="Region" column="Region" type="string" />
<property name="PostalCode" column="PostalCode" type="string" />
<property name="Country" column="Country" type="string" />
<property name="Phone" column="Phone" type="string" />
<property name="Fax" column="Fax" type="string" /> </class>
</hibernate-mapping>

7、NHShop.Data添加数据访问层类:CustomersData

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using NHibernate;
using NHShop.Domain.Entities;
using NHibernate.Linq;
using System.Linq.Expressions; namespace NHShop.Data
{
public class CustomersData
{
/// <summary>
/// 根据条件得到客户信息集合
/// </summary>
/// <param name="where"></param>
/// <returns></returns>
public IList<Customers> GetCustomerList(Expression<Func<Customers,bool>> where)
{
try
{
using (ISession session=NHibernateHelper.SessionFactory.OpenSession())
{
return session.Query<Customers>().Select(x => new Customers {
CustomerID = x.CustomerID,
ContactName = x.ContactName,
City = x.City,
Address = x.Address,
Phone = x.Phone,
CompanyName = x.CompanyName,
Country = x.Country
}).Where(where).ToList() ;
}
}
catch (Exception ex)
{ throw ex;
}
}
}
}

8、NHShop.Business添加业务逻辑类:CustomersBusiness

using NHShop.Data;
using NHShop.Domain.Entities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks; namespace NHShop.Business
{
public class CustomersBusiness
{
private CustomersData _customersData; public CustomersBusiness()
{
_customersData = new CustomersData();
} /// <summary>
/// 根据条件得到客户信息集合
/// </summary>
/// <param name="where"></param>
/// <returns></returns>
public IList<Customers> GetCustomersList(Expression<Func<Customers, bool>> where)
{
return _customersData.GetCustomerList(where);
}
}
}

9、NHShop.Web添加控制器和视图:Customers

最后成功,demo下载地址:

点击下载

第一个NHibernateDemo的更多相关文章

  1. 为什么很多人坚信“富贵险中求”?

    之家哥 2017-11-15 09:12:31 微信QQ微博 下载APP 摘要 网贷之家小编根据舆情频道的相关数据,精心整理的关于<为什么很多人坚信"富贵险中求"?>的 ...

  2. python基础全部知识点整理,超级全(20万字+)

    目录 Python编程语言简介 https://www.cnblogs.com/hany-postq473111315/p/12256134.html Python环境搭建及中文编码 https:// ...

  3. 一个使用MVC3+NHibernate “增删改查” 的项目

    一个使用MVC3+NHibernate “增删改查” 的项目  前言: 谈到NHibernate大伙并不陌生,搞Java的更是清楚,Hibernate是一个目前应用的最广泛的开放源代码的对象关系映射框 ...

  4. NHibernate从入门到精通系列(3)——第一个NHibernate应用程序

    内容摘要 准备工作 开发流程 程序开发 一.准备工作 1.1开发环境 开发工具:VS2008以上,我使用的是VS2010 数据库:任意关系型数据库,我使用的是SQL Server 2005 Expre ...

  5. 一个使用MVC3+NHibernate “增删改查” 的项目(修正版)

      前言: 谈到NHibernate大伙并不陌生,搞Java的更是清楚,Hibernate是一个目前应用的最广泛的开放源代码的对象关系映射框架,它对Java的JDBC(类似于ADO.Net)进行了非常 ...

  6. Tomcat一个BUG造成CLOSE_WAIT

    之前应该提过,我们线上架构整体重新架设了,应用层面使用的是Spring Boot,前段日子因为一些第三方的原因,略有些匆忙的提前开始线上的内测了.然后运维发现了个问题,服务器的HTTPS端口有大量的C ...

  7. 如何一步一步用DDD设计一个电商网站(九)—— 小心陷入值对象持久化的坑

    阅读目录 前言 场景1的思考 场景2的思考 避坑方式 实践 结语 一.前言 在上一篇中(如何一步一步用DDD设计一个电商网站(八)—— 会员价的集成),有一行注释的代码: public interfa ...

  8. 如何一步一步用DDD设计一个电商网站(八)—— 会员价的集成

    阅读目录 前言 建模 实现 结语 一.前言 前面几篇已经实现了一个基本的购买+售价计算的过程,这次再让售价丰满一些,增加一个会员价的概念.会员价在现在的主流电商中,是一个不大常见的模式,其带来的问题是 ...

  9. SQLSERVER将一个文件组的数据移动到另一个文件组

    SQLSERVER将一个文件组的数据移动到另一个文件组 有经验的大侠可以直接忽视这篇文章~ 这个问题有经验的人都知道怎麽做,因为我们公司的数据量不大没有这个需求,也不知道怎麽做实验 今天求助了QQ群里 ...

随机推荐

  1. IDEA导入Maven多项目(Mac下)

    主界面Import Project 选择maven项目目录文件夹 选择Import project from external model 中的maven选项,Next下一步 Sources和Docu ...

  2. 绕过D盾的php一句话

    d_dun.php <?php $a = '小狗狗你好啊'; $b = '小盾盾你好啊'; foreach ($_REQUEST as $key => $value) { $$key = ...

  3. python提示AttributeError: 'NoneType' object has no attribute 'append'【转发】

    在写python脚本时遇到AttributeError: 'NoneType' object has no attribute 'append' a=[] b=[1,2,3,4] a = a.appe ...

  4. JAVA执行远端服务器的脚本

    JAVA执行远端服务器的脚本 问题描述 实现思路 技术要点 代码实现 问题描述 工作中遇到这样一个问题,我们的应用为了实现高可用会采取双机部署,拓扑图大致如下: 这种方案可以简单的保证高可用,即便应用 ...

  5. golang使用 gzip压缩

    golang使用 gzip压缩 这个例子中使用gzip压缩格式,标准库还支持zlib, bz2, flate, lzw 压缩处理_三步: 1.创建压缩文件2.gzip write包装3.写入数据 ou ...

  6. (转)支持 PS/2 与 USB 的键盘过滤驱动(可卸载)

    Author:  sinisterEmail:   sinister@whitecell.orgHomepage:http://www.whitecell.org Date:    2007-02-2 ...

  7. Linux 使用记1 fastx toolkit安装问题

    1 安装fastx toolkit的时候,步骤按https://blog.csdn.net/LotusWang0723/article/details/78723409 其中可能会出现如下报错 tex ...

  8. python列表和字符串的三种逆序遍历方式

    python列表和字符串的三种逆序遍历方式 列表的逆序遍历 a = [1,3,6,8,9] print("通过下标逆序遍历1:") for i in a[::-1]: print( ...

  9. Python 处理 json

    Python在处理json数据中有四个重要的函数:dump,load:dumps,loads. 序列化(dict 包装成 json文件) dump(转储):将字典dic对象 转化为 json文件 AP ...

  10. tomcat设置错误页面

    今日学习笔记: 当我们访问tomcat的一个不存在的页面,返回错误信息如下: 这样的界面直接暴露给用户并不友好,有时候还不安全,因此一般需要修改默认的错误页. vim /$TOMCAT_HOME/co ...