本篇文章,让我们一起来探索Nhibernate。
首先我们去搜索Nhibernate下载地址,如下链接所示。
该版本可能是最新版,我下载的4.0.4.GA。其中GA意思我没搞清楚。不过应该不重要。
https://sourceforge.net/projects/nhibernate/
下载完成后,解压缩如图所示。

其中Required_Bins存储的是类库和其他资源;字面的意思Required,是必须文件。
打开Required文件夹,里是这样的。
两个类库;两个类库是要被引用的。
类库拥有对应的XML,没找到具体使用该XML的方法。所以暂时不去理他。
NHibernate.pdb应该是没有用的。估计是作者忘记删除了。
nhibernate-configuration.xsd和nhibernate-mapping.xsd是要放到c盘的,路径如下:
C:\Program Files (x86)\Microsoft Visual Studio 11.0\Xml\Schemas
因为是我用的是vs2012,所以,我找的路径是Microsoft Visual Studio 11.0。
我上网上调查了下这两个文件是做什么用的。调查结果是,这俩货是【文件智能提示功能】用的。
上网调查后,发现Nhibernate有Castle框架、LinFu框架、Spring.Net三种。
看起来很复杂,不过先不去管那么多,先直接引用类库。

然后我建立了一个类库程序,引用Iesi.Collections.dll和NHibernate.dll两个DLL。
接下来,我们开始建立持久化对象。

  1. public class Test
  2. {
  3. public virtual int Id { get; set; }
  4. public virtual string Name { get; set; }
  5. }

对象与数据库的映射是保存在XML文件中的,我们配置XML映射文件如下。
该XML文件的属性,要求设置其生成操作为【嵌入的资源】。
此外,我怕它丢失,还给他设置了始终复制的属性。

XML文件如下:

  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
  3. assembly="NherbinateHelper"
  4. namespace="NherbinateHelper">
  5. <class name ="Test">
  6. <id name="Id" column ="Id">
  7. <generator class ="native"/>
  8. </id>
  9. <property name ="Name"/>
  10. </class>
  11. </hibernate-mapping>

再然后,我们建立数据库连接的类。
因为我们没有显示设置数据库连接字符串,所以,我猜测这个类,会读配置文件中SQL字符串连接。

  1. public class NHibernateHelper
  2. {
  3. private ISessionFactory _sessionFactory;
  4. public NHibernateHelper()
  5. {
  6. _sessionFactory = GetSessionFactory();
  7. }
  8. private ISessionFactory GetSessionFactory()
  9. {
  10. return (new Configuration()).Configure().BuildSessionFactory();
  11. }
  12. public ISession GetSession()
  13. {
  14. return _sessionFactory.OpenSession();
  15. }
  16. }

然后,我们建立domain(域),添加增删改查的方法。

  1. public class NHibernateSample
  2. {
  3. protected ISession Session { get; set; }
  4. public NHibernateSample(ISession session)
  5. {
  6. Session = session;
  7. }
  8. public Test GetCustomerById(int Id)
  9. {
  10. return Session.Get<Test>(Id);
  11. }
  12. }

然后,我们新建一个控制台程序,用来调用这个类库测试。

测试类代码如下。

  1. public class NHibernateSampleFixture
  2. {
  3. private NHibernateSample _sample;
  4. public NHibernateSampleFixture()
  5. {
  6. _sample = new NHibernateSample(new NHibernateHelper().GetSession());
  7. }
  8. public void GetCustomerByIdTest()
  9. {
  10. var tempCutomer = new Test { Name = "李" };
  11. _sample.CreateCustomer(tempCutomer);
  12. Test customer = _sample.GetCustomerById(1);
  13. int customerId = customer.Id;
  14. }
  15. }

调用如下:

  1. class Program
  2. {
  3. static void Main(string[] args)
  4. {
  5. NHibernateSampleFixture f = new NHibernateSampleFixture();
  6. f.GetCustomerByIdTest();
  7. }
  8. }

测试结果是失败,因为缺少配置数据库连接的文件。
现在我们打开文件夹Configuration_Templates,发现Configuration_Templates文件夹下有如下文件。

我使用的数据库是sqlserver,所以,我复制了mssql.cfg.xml。
然后将复制的文件,黏贴到测试的控制台程序下,然后改名为《hibernate.cfg.xml》。
这里测试了下,貌似不改名不好使,配置文件内容如下
【PS:我始终没搞懂,XML中的CFG代表什么意思。】

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2" >
  3. <session-factory name="NHibernate.Test">
  4. <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
  5. <property name="connection.connection_string">
  6. Server=SKY-20160718RXO\SA;initial catalog=Nherbinate;Integrated Security=SSPI;
  7. </property>
  8. <property name="dialect">NHibernate.Dialect.MsSql2012Dialect</property>
  9. <mapping assembly="NherbinateHelper"/>
  10. </session-factory>
  11. </hibernate-configuration>

我连接的是sqlserver2012,所以配置文件里,我有做修改,修改驱动为NHibernate.Dialect.MsSql2012Dialect。原始版是2008。
其中<mapping assembly="NherbinateHelper"/>是后加的,原文件里没有。
这句话的意思是,映射我创建的那个类库。
我推断,Nherbinate是读这个配置文件,然后到这个程序集里,反射查询那些poco对象。
最后,nhibernate-configuration-2.2这句话我想了很久要不要改成4.0。
结果是我没改,测试一切正常。可以顺利使用。
结语
这是一场Nhibernate探索之旅,结果是非常顺利的配置成功了。

作者:Kiba518
链接:https://www.imooc.com/article/43748
来源:慕课网
本文首次发布于慕课网 ,转载请注明出处,谢谢合作

C#—Nhibernate使用教程的更多相关文章

  1. Nhibernate学习教程(1)-- 开篇有益

    NHibernate之旅(1):开篇有益 本节内容 NHibernate是什么 NHibernate的架构 NHibernate资源 欢迎加入NHibernate中文社区 作者注:2009-11-06 ...

  2. NHibernate 基础教程

    NHibernate之旅系列文章导航 宣传语 NHibernate.NHibernate教程.NHibernate入门.NHibernate下载.NHibernate教程中文版.NHibernate实 ...

  3. 【转】NHibernate入门教程

    开源框架完美组合之Spring.NET + NHibernate + ASP.NET MVC + jQuery + easyUI 中英文双语言小型企业网站Demo 摘要: 热衷于开源框架探索的我发现A ...

  4. NHibernate学习教程(6)--事务Transactions

    本节内容 事务概述 1.新建对象 [测试成功提交] [测试失败回滚] 2.删除对象 3.更新对象 4.保存更新对象 结语 上一篇我们介绍了NHibernate中的Insert, Update,  De ...

  5. Nhibernate学习教程(2)-- 第一个NHibernate程序

    NHibernate之旅(2):第一个NHibernate程序 本节内容 开始使用NHibernate 1.获取NHibernate 2.建立数据库表 3.创建C#类库项目 4.设计Domain 4- ...

  6. NHibernate实战详解(二)映射配置与应用

    关于NHibernate的资料本身就不多,中文的就更少了,好在有一些翻译文章含金量很高,另外NHibernate与Hibernate的使用方式可谓神似,所以也有不少经验可以去参考Hibernate. ...

  7. NHibernate实战详解(一)领域模型设计

    关于NHibernate的资料本身就不多,中文的就更少了,好在有一些翻译文章含金量很高,另外NHibernate与Hibernate的使用方式可谓神似,所以也有不少经验可以去参考Hibernate. ...

  8. Nhibernate 4.0 教程入门

    Nhibernate 4.0 教程 目录 1.      下载Nhibernate 4.04. 1 2.      入门教程... 2 3.      测试项目详解... 3 4.      总结.. ...

  9. NHibernate教程

    NHibernate教程 一.NHibernate简介 在今日的企业环境中,把面向对象的软件和关系数据库一起使用可能是相当麻烦.浪费时间的.NHibernate是一个面向.Net环境的对象/关系数据库 ...

随机推荐

  1. linux Apache 日志配置

    [root@Nagios-Server extra]# vimhttpd-vhosts.conf <VirtualHost *:80> ServerAdmin 111111 ServerN ...

  2. 05java基础

    1.BigInteger和BigDecimal类 package cn.jxufe.java.chapter5.demo01; import java.math.BigInteger; public ...

  3. 2--面试总结-深入理解js线程进阶-宏任务微任务

    前言:Event Loop即时间循环,是指浏览器或Node的一种解决javascript单线程运行时不会阻塞的一种机制,也就是我们经常使用异步的原理 Js运行机制      1.不同运行环境,js运行 ...

  4. php 强制类型转换

      123 123.01 array("123",123) true false null (string)  "123" "123.01" ...

  5. DDD领域驱动设计初探(六):领域服务

    前言:之前一直在搭建项目架构的代码,有点偏离我们的主题(DDD)了,这篇我们继续来聊聊DDD里面另一个比较重要的知识点:领域服务.关于领域服务的使用,书中也介绍得比较晦涩,在此就根据博主自己的理解谈谈 ...

  6. Python四种实现单例模式的方法

    在这之前,先了解super()和__new__()方法 super()方法: 返回一个父类或兄弟类类型的代理对象,让你能够调用一些从继承过来的方法. 它有两个典型作用: a. 在单继承的类层次结构中, ...

  7. App开发工具

    软件下载: 链接:https://pan.baidu.com/s/1yaAko1svHW3v3kdn6mSgxQ提取码:rrcd 参考文档地址: http://dev.dcloud.net.cn/mu ...

  8. osi7层模型及线程和进程

    端口的作用: 在同一台电脑上,为了让不同 的程序分离开来! http:网站默认端口是80 https:网站默认端口是443 osi七层模型: 1.应用层:软件 2.表示层:接收数据 3.会话:保持登录 ...

  9. Arduino库

    单总线库: 下载地址  :  链接:https://pan.baidu.com/s/1YSuqrXWuBAxMEUWHy8rckw    提取码:svix 把整个文件夹复制到 Arduino安装目录的 ...

  10. 【NOIP2016提高A组8.11】自然数

    题目 分析 \(O(n)\)求出mex(1,i)(1<=i<=n): 虽然0<=ai<=10^9,但只有n个数,所以mex一定小于等于n for(long long j=1;j ...