什么是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. String Match

    Finding length of longest common substring /*Finding length of longest common substring using DP * * ...

  2. java多线程中注入Spring对象问题

    web应用中java多线程并发处理业务时,容易抛出NullPointerException. 原因: 线程中的Spring Bean没有被注入.web容器在启动时,没有提前将线程中的bean注入,在线 ...

  3. 第五周助教工作总结——NWNU李泓毅

    第五周助教总结 注:因第四次实验安排两个标准时间完成,因此本周未提交完整作业. 本周心得: 第四次实验进行过半,八组同学都在实验课上进行了一次中期总结,并形成书面总结在微信群中讨论. 根据各组同学的中 ...

  4. win10 64位 安装scrapy

    在学习python时,不可避免下载了Anaconda,当我打算写爬虫时,urllib,requests,selenium,pyspider都已经安装好了,可以直接使用了,但是有一天我想要使用scrap ...

  5. (27)How to stay calm when you know you'll be stressed

    https://www.ted.com/talks/daniel_levitin_how_to_stay_calm_when_you_know_you_ll_be_stressed00:12A few ...

  6. Object constructor

    1. Object is an instance of Function.2. Object does not have a property called constructor so when w ...

  7. 第47章:MongoDB-用户管理

    ①用户管理 在MongoDB里面默认情况下只要是进行连接都可以不使用用户名与密码,因为要想让其起作用,则必须具备以下两个条件: ·条件一:服务器启动的时候打开授权认证: ·条件二:需要配置用户名和密码 ...

  8. PhpSpreadsheet处理表格

    介绍:PhpSpreadsheet是PHPExcel的下一个版本.它打破了兼容性,大大提高了代码库质量(命名空间,PSR合规性,最新PHP语言功能的使用等).由于所有努力都转移到了PhpSpreads ...

  9. nmap 介绍

    原文地址:http://drops.wooyun.org/tips/2002 原文地址:http://infotechbits.wordpress.com/2014/05/04/introductio ...

  10. PowerBI

    1.官方PowerBI实例:https://docs.microsoft.com/zh-cn/power-bi/sample-tutorial-connect-to-the-samples 2.配置计 ...