C#—Nhibernate使用教程
本篇文章,让我们一起来探索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。
接下来,我们开始建立持久化对象。
public class Test
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
}
对象与数据库的映射是保存在XML文件中的,我们配置XML映射文件如下。
该XML文件的属性,要求设置其生成操作为【嵌入的资源】。
此外,我怕它丢失,还给他设置了始终复制的属性。
XML文件如下:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="NherbinateHelper"
namespace="NherbinateHelper">
<class name ="Test">
<id name="Id" column ="Id">
<generator class ="native"/>
</id>
<property name ="Name"/>
</class>
</hibernate-mapping>
再然后,我们建立数据库连接的类。
因为我们没有显示设置数据库连接字符串,所以,我猜测这个类,会读配置文件中SQL字符串连接。
public class NHibernateHelper
{
private ISessionFactory _sessionFactory;
public NHibernateHelper()
{
_sessionFactory = GetSessionFactory();
}
private ISessionFactory GetSessionFactory()
{
return (new Configuration()).Configure().BuildSessionFactory();
}
public ISession GetSession()
{
return _sessionFactory.OpenSession();
}
}
然后,我们建立domain(域),添加增删改查的方法。
public class NHibernateSample
{
protected ISession Session { get; set; }
public NHibernateSample(ISession session)
{
Session = session;
}
public Test GetCustomerById(int Id)
{
return Session.Get<Test>(Id);
}
}
然后,我们新建一个控制台程序,用来调用这个类库测试。
测试类代码如下。
public class NHibernateSampleFixture
{
private NHibernateSample _sample;
public NHibernateSampleFixture()
{
_sample = new NHibernateSample(new NHibernateHelper().GetSession());
}
public void GetCustomerByIdTest()
{
var tempCutomer = new Test { Name = "李" };
_sample.CreateCustomer(tempCutomer);
Test customer = _sample.GetCustomerById(1);
int customerId = customer.Id;
}
}
调用如下:
class Program
{
static void Main(string[] args)
{
NHibernateSampleFixture f = new NHibernateSampleFixture();
f.GetCustomerByIdTest();
}
}
测试结果是失败,因为缺少配置数据库连接的文件。
现在我们打开文件夹Configuration_Templates,发现Configuration_Templates文件夹下有如下文件。
我使用的数据库是sqlserver,所以,我复制了mssql.cfg.xml。
然后将复制的文件,黏贴到测试的控制台程序下,然后改名为《hibernate.cfg.xml》。
这里测试了下,貌似不改名不好使,配置文件内容如下
【PS:我始终没搞懂,XML中的CFG代表什么意思。】
<?xml version="1.0" encoding="utf-8"?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2" >
<session-factory name="NHibernate.Test">
<property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
<property name="connection.connection_string">
Server=SKY-20160718RXO\SA;initial catalog=Nherbinate;Integrated Security=SSPI;
</property>
<property name="dialect">NHibernate.Dialect.MsSql2012Dialect</property>
<mapping assembly="NherbinateHelper"/>
</session-factory>
</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使用教程的更多相关文章
- Nhibernate学习教程(1)-- 开篇有益
NHibernate之旅(1):开篇有益 本节内容 NHibernate是什么 NHibernate的架构 NHibernate资源 欢迎加入NHibernate中文社区 作者注:2009-11-06 ...
- NHibernate 基础教程
NHibernate之旅系列文章导航 宣传语 NHibernate.NHibernate教程.NHibernate入门.NHibernate下载.NHibernate教程中文版.NHibernate实 ...
- 【转】NHibernate入门教程
开源框架完美组合之Spring.NET + NHibernate + ASP.NET MVC + jQuery + easyUI 中英文双语言小型企业网站Demo 摘要: 热衷于开源框架探索的我发现A ...
- NHibernate学习教程(6)--事务Transactions
本节内容 事务概述 1.新建对象 [测试成功提交] [测试失败回滚] 2.删除对象 3.更新对象 4.保存更新对象 结语 上一篇我们介绍了NHibernate中的Insert, Update, De ...
- Nhibernate学习教程(2)-- 第一个NHibernate程序
NHibernate之旅(2):第一个NHibernate程序 本节内容 开始使用NHibernate 1.获取NHibernate 2.建立数据库表 3.创建C#类库项目 4.设计Domain 4- ...
- NHibernate实战详解(二)映射配置与应用
关于NHibernate的资料本身就不多,中文的就更少了,好在有一些翻译文章含金量很高,另外NHibernate与Hibernate的使用方式可谓神似,所以也有不少经验可以去参考Hibernate. ...
- NHibernate实战详解(一)领域模型设计
关于NHibernate的资料本身就不多,中文的就更少了,好在有一些翻译文章含金量很高,另外NHibernate与Hibernate的使用方式可谓神似,所以也有不少经验可以去参考Hibernate. ...
- Nhibernate 4.0 教程入门
Nhibernate 4.0 教程 目录 1. 下载Nhibernate 4.04. 1 2. 入门教程... 2 3. 测试项目详解... 3 4. 总结.. ...
- NHibernate教程
NHibernate教程 一.NHibernate简介 在今日的企业环境中,把面向对象的软件和关系数据库一起使用可能是相当麻烦.浪费时间的.NHibernate是一个面向.Net环境的对象/关系数据库 ...
随机推荐
- JavaScript是如何工作的:引擎,运行时间以及调用栈的概述
JavaScript是如何工作的:引擎,运行时以及调用栈的概述 原文:How JavaScript works: an overview of the engine, the runtime, and ...
- php 爬虫爱奇艺 视频、内容
,][]; ][]; ][]); ][]); ]); ][]; ][]; ][])) { ][]; }][])) { ][]; } ][]; ; ...
- linux NFS 自动挂载
NFS 自动挂载的两种方法 第一种: 需要注意的事项 开机挂载的命令不能写入到/etc/fstab 中,由于 NFS 依赖于网络,而/etc/fstab 的引用是在计算机 网络尚未启动的时候就开始引导 ...
- VB中RaiseEvent语句的功能及用法
Creat a new class named Class1, it's codes like this: Public Event MyEvent() Public Sub RaiseTheEven ...
- L3-006. 迎风一刀斩
迎着一面矩形的大旗一刀斩下,如果你的刀够快的话,这笔直一刀可以切出两块多边形的残片.反过来说,如果有人拿着两块残片来吹牛,说这是自己迎风一刀斩落的,你能检查一下这是不是真的吗? 注意摆在你面前的两个多 ...
- [跨界思考|瑞典|IKEA]有意思的宜家|IKEA
来自北欧瑞典的IKEA无疑是成功的企业.根据我最近几天的去宜家的体验和来自网上的资料,我发现IKEA不止是成功的企业,而且可以说是一家独特又伟大的公司. 说到IKEA,就不得不说下它的创始人:坎普拉德 ...
- 【BZOJ1488】[HNOI2009]图的同构计数
题目链接 题意 求 n 个点的同构意义下不同的图的数量.\((n\leq 60)\) Sol \(Polya\) 定理的练手题. 我们这里先把边的存在与否变成对边进行黑白染色,白色代表不存在,这样就变 ...
- ExoPlayer + 边缓存边播放
在此基础上改动:https://www.cnblogs.com/candyzhmm/p/9957928.html private void openPlayer(String videoUrl) { ...
- 循环结构for语句-求和思想
循环结构for语句的练习-求和思想:需求1:求出1到10之间的数据和 public static void main(String[] args) { int sum = 0; for(int i = ...
- sh_07_买苹果增强版
sh_07_买苹果增强版 # 1. 输入苹果的单价 price_str = input("苹果的单价:") # 2. 输入苹果的重量 weight_str = input(&quo ...