什么是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. oracle中向timeStamp类型字段插入当前时间

    to_timestamp(to_char(sysdate,'YYYY-MM-DD HH24:MI:SS'),'YYYY-MM-DD HH24:MI:SS')

  2. idea编辑器激活码

    激活方式:License Server1.将地址 http://active.chinapyg.com/ 或者 http://idea.toocruel.net 任意一个复制到License Serv ...

  3. java操作FTP的一些工具方法

    java操作FTP还是很方便的,有多种开源支持,这里在apache开源的基础上自己进行了一些设计,使用起来更顺手和快捷. 思路: 1.设计FTPHandler接口,可以对ftp,sftp进行统一操作, ...

  4. suse 11 pip pip3使用过程中遇到的各种问题

    在安装完成python3.6后,使用pip3安装某些插件,报如下错误 linux-9qk9:~ # pip3 install ipython pip is configured with locati ...

  5. JS入门经典第四章总结

    charAt():该函数有一个参数,即选择哪一个位置上的参数.返回值就是该位置上的字符. charCodeAt():该函数有一个参数,即选择哪一个位置上的参数.返回值是该位置字符在Unicode字符集 ...

  6. 可遇不可求的Question之Sqlserver2005文件组的迁移篇

    Sqlserver2005 文件组的折腾 问题:由于数据庞大,我在数据库里面使用了分区表,建了很多文件组,一个分区对应一个文件组,一个文件组只有一个文件.我在建分区表的时候,在数据库属性里面“文件”选 ...

  7. document,element,node方法

    document方法: getElementById(id)                             返回指定结点的引用 getElementsByTagName_r(name)    ...

  8. 阿里云Centos+Django+Nginx+uWSGI

    针对系统中自带的Python2.7版本 1.安装python-devel yum install python-devel 2.安装uwsgi pip install uwsgi 3.测试uwsgi是 ...

  9. idea 新建项目上传至git(coding)

    一.新建项目 1.改为git版本 2.出现如下框 选择Git 3.新建一个.gitignore file (Git) 4.勾掉一些不需要的 5.出现如下框 5.1.如果不知道.gitignore fi ...

  10. Openvswitch手册(9): Flow

    这一节我们将flow table flow table主要由ovs-ofctl命令操作 ovs-ofctl可以走和openflow controller一样的协议: ssl:ip[:port]: Th ...