大家一起来学 NHibernate+NUnit (VS2012+SQL Server2008)

大家一起来学 NHibernate+NUnit (VS2012+SQL Server2008)

分类: C#2013-08-10 18:47 1589人阅读 评论(5) 收藏 举报

NHibernateNUnitVisual Studio 2012

如果你没听过Nhibernate or NUnit,那么,恭喜你,和我一样,握个手吧。如果你已经是个老酱油了,那就道不同不带你玩了,请自觉绕行,,,。谨以此文献给像我这样广大的小白同胞们(鼓掌)!

话说2013年某月某日,听一武林前辈提起 NHibernate ,小白我顿时大脑空白,这是个啥么东东啊,在强烈好奇心的驱使下,我决定先去吃晚饭,回来后便将此事忘掉了,。。。在此我只想说一句:我不是故意的!前几日,又偶闻坊间传言,话说欧特曼打小怪兽时,所使用的招式中就有NHibernate ANDNUnit,这下小白我可长记性了,为啥妮?因为像我这样广大小白的终极愿望就是穷极毕生之所学,打倒人世间一切妖魔鬼怪啊。话不多说,立马招来谷歌度娘拷打一番,根据“坦白从宽、抗拒从严”的原则,这俩小子把NHibernate和Nunit的勾当一五一十的全都招了出来,我心甚慰啊……原来NHibernate起源于java学派久负盛名的三大框架SSH之一:Hibernate。好吧,如果你和我一样,对java学派嗤之以鼻的话,那我就再废话一些:首先,你要明白,NHibernate在.NET中的作用和Hibernate在JAVA中的作用一样;第二,他们都是开源的东东;第三,他们都是一种对象关系数据库映射框架。第三点要好好理解哦,“对象”,.NET和java都是面向对象的,通俗点就是里面都是各种class类;“关系数据库”,MS SQL,ORACLE,etc,就是指的它们了;“映射“,就是在指hibernate在关系数据库和我们面向对象class之间搭起了一座桥梁。因此,有了这个,我们就可以轻松的使用面向对象的思维来编写数据层了,至于数据层如何与数据库打交道,就交给hibernate去处理了。那么NUnit 呢?这个简单,说白了,就一个测试工具,我们在里面写好测试代码,程序自动帮我们做测试,吼吼。说了那么多,其实,我也搞不明白,你们到底懂没懂……,至此,如果广大同胞们脑海中还是没有一丝波澜的话,那就请各位自己去拷打一番谷歌度娘吧。

由于NHibernate和NUnit 的东西实在太多,而小白我功力有限,所以,给大家推荐两个很好的博客,里面写的都很详细了:

1,NHibernate之旅系列文章导航 http://www.cnblogs.com/lyj/archive/2008/10/30/1323099.html

2,NHibernate从入门到精通系列http://www.cnblogs.com/GoodHelper/archive/2011/02/14/nhiberante_01.html

这两个博客里有些内容重叠了,但我还是建议大家都从头到尾好好读一下,毕竟我们是小白嘛,

不过两个博客千好万好,只有一点不好,就是年代久远,里面的示例很多地方语法都改变了,这下可把我这小伙伴给惊呆了,。还好小白我心里素质好,经过一番冥思苦想,总算一切搞定,下周二就七夕了,我也没啥好送的,就带大家一起来做一个NHibernate+NUnit的Demo吧,

开发环境:VS 2012 ,SQL Server 2008,NHibernate 3.3.3 ,NUnit 2.6.2

NHibernate 下载地址:NHibernate Forge

NUnit 下载地址:NUnit

当然了,稍后我会把Demo+NHibernate3.3.3+NUnit 2.6.2 一起打包,大家可以直接去下载。

Demo 下载地址:Demo

下面就正式开始了:

1,打开VS2012,新建项目,选择类库,起名为:Domain。确定

2,把自带的Class1.cs删掉,新建一个Student类。代码如下:

[csharp] view plaincopyprint?

  1. using System;

  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5. using System.Threading.Tasks;  
  6. namespace Domain

  7. {  
  8. /// <summary>
  9. /// 学生类
  10. /// </summary>
  11. public class Student  
  12. {  
  13. /// <summary>
  14. /// ID
  15. /// </summary>
  16. public virtual int ID { get; set; }  
  17. /// <summary>
  18. /// 学生姓名
  19. /// </summary>
  20. public virtual string Name { get; set; }  
  21. /// <summary>
  22. /// 学生性别
  23. /// </summary>
  24. public virtual string Sex { get; set; }  
  25. /// <summary>
  26. /// 学生年龄
  27. /// </summary>
  28. public virtual int Age { get; set; }  
  29. }  
  30. }

3,添加一个XML文件,取名为:Student.hbm.xml,如图:

此时,目录结构是这样的:

4,编写Student.hbm.xml 映射文件,代码如下:

[html] view plaincopyprint?

  1. <?xml version="1.0" encoding="utf-8" ?>

  2. <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Domain" namespace="Domain">
  3. <class name="Student" table="T_Student" lazy="true">
  4. <id name="ID" column="ID" unsaved-value="0">
  5. <generator class="native"></generator>
  6. </id>
  7. <property name="Name" type="string" column="StuName" length="20" not-null="true"></property>
  8. <property name="Sex" type="string" column="StuSex" length="2"></property>
  9. <property name="Age" type="Int32" column="StuAge"></property>
  10. </class>
  11. </hibernate-mapping>

XML 映射文件的编写是NHibernate中关键的一步,如果你没有预读那两篇博客的话,估计这里就看不懂了。注意:编写XML文件之前,记得把下载的NHibernate中的nhibernate-mapping.xsd文件和nhibernate-configuration.xsd文件放到C:\Program Files (x86)\Microsoft Visual Studio 11.0\Xml\Schemas目录下(我的是win7 64, 因机器不一,如果不知道放哪的话,就百度下吧),这样,编写xml文件时,VS就会有智能提示了。
5,在Student.hbm.xml 文件上右击,选择”属性“,将xml文件的生成操作属性由”内容“改为”嵌入的资源“。如下图:

6,在项目解决方案上右击,选择添加新建项目,添加一个新的类库,取名为:NHibernateTest。(其实,这就是我们利用UNit 进行单元测试的地方)如图:

将新建类库中默认的Class1.cs删掉,此时,目录结构是这样的:

7,在NHibernateTest 项目中,添加对我们刚才新建的Domain类库的引用,以及添加我们下载的NHibernate和NUnit 程序集的引用。如图:

引用添加完毕后,就是下面这个样子的,

10,把下载的NHibernate 中Configuration_Templates文件夹下的MSSQL.cfg.xml文件复制粘贴到NHibernateTest 类库中,并重命名为:hibernate.cfg.xml 并修改文件如下:

[html] view plaincopyprint?

  1. <?xml version="1.0" encoding="utf-8"?>

  2. <!--   
  3. This template was written to work with NHibernate.Test.  
  4. Copy the template to your NHibernate.Test project folder and rename it in hibernate.cfg.xml and change it   
  5. for your own use before compile tests in VisualStudio.  
  6. -->
  7. <!-- This is the System.Data.dll provider for SQL Server -->
  8. <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2" >
  9. <session-factory name="NHibernate.Test">
  10. <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
  11. <property name="connection.connection_string">
  12. Server=(local);initial catalog=nhibernate;Integrated Security=SSPI
  13. </property>
  14. <property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property>
  15. <!--添加下面这行代码,除此之外,其它都不用改动,当然,你也可以修改上面的数据库链接字符串-->
  16. <mapping assembly="Domain"/>
  17. </session-factory>
  18. </hibernate-configuration>

然后,在hibernate.cfg.xml文件上右击,选择属性,将xml文件的复制到输入目录属性修改为:始终复制

11,添加NHibernateTest.cs类,代码如下:

[csharp] view plaincopyprint?

  1. using System;

  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5. using System.Threading.Tasks;  
  6. using NHibernate;  
  7. using NHibernate.Tool.hbm2ddl;  
  8. using NUnit.Framework;  
  9. namespace NHibernateTest

  10. {  
  11. [TestFixture]  
  12. public class NHibernateInit  
  13. {  
  14. [Test]  
  15. public void InitTest()  
  16. {  
  17. var cfg = new NHibernate.Cfg.Configuration().Configure(System.AppDomain.CurrentDomain.BaseDirectory + "\\hibernate.cfg.xml");  
  18. new SchemaExport(cfg).Execute(true, true, false);  
  19. using (ISessionFactory sessionFactory = cfg.BuildSessionFactory()) { }  
  20. }  
  21. }  
  22. }

12,打开SQL Server 08,新建一个nhibernate 数据库

[sql] view plaincopyprint?

  1. create database nhibernate

13,在 NHibernateTest 类库上右键,选择属性,切换到”调试“选项卡,单击”启动外部调试“,浏览,选择Nunit.exe 程序。(注意:前提是你已经安装了文章开头时让你下载的Nunit 2.6.2.msi程序),效果如下图所示:


14,点击一下”全部保存“,然后在整个的项目解决方案上右键,选择”生成解决方案“。然后,将NHibernateTest 类库右键,设为启动项目。F5,运行程序

此时,我们看到NUnit.exe已经启动了,在NUnit窗口中,选择:"File"->”new project“,文件名为:NHibernateTest.nunit,点击保存。此时,窗口依然什么都没有。再选择:"Project"->"Add assembly",在弹出的对话框中,找到我们的NHibernateTest类库生成的dll文件,点击打开,如下图:

15,单击NUnit窗口中的Run按钮,此时,NUnit 会自动执行我们的NHibernateTest 类库中的方法。这时,窗口应该是下面这样的:

16,此时,打开数据库,会发现,我们的T_Student数据表已经被自动创建好了。

小伙伴们,你们有没有被惊呆呢?是不是很神奇的东东?哈哈……我发现写文章真是个体力活,受不了了……

唉,没办法,本着对广大的小伙伴尽职尽责的高度使命感,小白我决定继续码字……(鼓掌)

这样测试的话,每次我们都还要启动外部程序NUnit,相信有的小伙伴不乐意了,放心好了,我们可以通过安装插件的方式,解决这个问题(注意:此过程需联网)。

在 VS2012 中,选择:”工具“=》”扩展和更新“,在弹出的对话框中,单击”联机“标签,之后再在搜索框中输入:”NUnit“ ,回车,效果如下图所示:

选择”下载“,下载完毕后,会提示你安装,你直接选择安装就可以了。安装完毕后,重启一下VS。重启之后,选择菜单栏中的:”测试“-》”窗口“-》”测试资源管理器“。然后再重新生成一下整个项目解决方案,这时候,我们在”测试资源管理器“中就可以看到我们的NHibernateTest 测试类了。在这里,我们可以选择全部运行,也可以在单独的方法上右键,选择运行或调试。

下面,我又新写了几个测试方法,分别测试往T_Student表中存入数据,取出数据。NHibernateInit.cs 文件代码如下:

[csharp] view plaincopyprint?

  1. using System;

  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5. using System.Threading.Tasks;  
  6. using NHibernate;  
  7. using NHibernate.Tool.hbm2ddl;  
  8. using NUnit.Framework;  
  9. namespace NHibernateTest

  10. {  
  11. [TestFixture]//定义一个测试类,里面可以包含很多测试函数和初始化、销毁函数。
  12. public class NHibernateInit  
  13. {  
  14. [Test]//定义一个独立的测试函数。
  15. public void InitTest()  
  16. {  
  17. var cfg = new NHibernate.Cfg.Configuration().Configure(System.AppDomain.CurrentDomain.BaseDirectory + "\\hibernate.cfg.xml");  
  18. new SchemaExport(cfg).Execute(true, true, false);  
  19. using (ISessionFactory sessionFactory = cfg.BuildSessionFactory()) { }  
  20. }  
  21. private ISessionFactory _sessionFactory;

  22. [SetUp]//定义测试函数初始化函数,每个测试函数运行前都会被调用一次。

  23. public void InitSessionFactory()  
  24. {  
  25. var cfg = new NHibernate.Cfg.Configuration().Configure(System.AppDomain.CurrentDomain.BaseDirectory + "\\hibernate.cfg.xml");  
  26. _sessionFactory = cfg.BuildSessionFactory();  
  27. }  
  28. [Test]

  29. public void SaveTest()  
  30. {  
  31. var stu = new Domain.Student()  
  32. {  
  33. Name = "张三",  
  34. Sex = "M",  
  35. Age = 20  
  36. };  
  37. using (ISession session = _sessionFactory.OpenSession())  
  38. {  
  39. try
  40. {  
  41. object obj = session.Save(stu);  
  42. session.Flush();  
  43. Assert.NotNull(obj);  
  44. }  
  45. catch (Exception ex)  
  46. {  
  47. throw ex;  
  48. }  
  49. }  
  50. }  
  51. [Test]

  52. public void SelectTest()  
  53. {  
  54. using (ISession session = _sessionFactory.OpenSession())  
  55. {  
  56. Domain.Student stu = session.Get<Domain.Student>(1);  
  57. Assert.NotNull(stu);  
  58. Console.WriteLine(stu.Name);  
  59. }  
  60. }  
  61. }  
  62. }

测试结果如下图所示:

OK了,到此为止,算是把NHibernate+NUnit 的demo完整演示一遍了,不知道各位小伙伴们看懂了没?末尾了,免不得再唠叨一句:珍爱生命,远离IT。。。。

注:关于使用NUnit 测试和 MS 测试框架之间的区别,大家可以去看我转载的一篇文章:Nunit Test 和 MS Test 的区别

时间: 2024-10-17 19:01:18

大家一起来学 NHibernate+NUnit (VS2012+SQL Server2008)的相关文章

NHibernate+NUnit (VS2012+SQL Server2008) (转)

源博客:http://blog.csdn.net/jiajiayouba/article/details/9877875 首先,你要明白,NHibernate在.NET中的作用和Hibernate在JAVA中的作用一样:第二,他们都是开源的东东:第三,他们都是一种对象关系数据库映射框架.第三点要好好理解哦,"对象",.NET和java都是面向对象的,通俗点就是里面都是各种class类:"关系数据库",MS SQL,ORACLE,etc,就是指的它们了:"映

sql server2008配置管理工具服务显示远程过程调用失败

SQL SERVER2008配置管理工具服务显示远程过程调用失败 前两天,装了VS2012后,打开SQL2008配置管理工具,发现SQL服务名称里什么也没有,只有一个提示:(如图) 上网搜了,试了很多方法,像什么把windows\system32\wbem下的framedyn.dll复制到system32目录下,还有照一个老外说的,下什么更新补丁,都没用!! 想重装SQL2008,结果运行安装程序,变成了英文版(以前装显示的是中文的),而且安装根目录选不了!巨想死! 万念俱灰下,打开360,卸载

java连接sql server2008的两种方法

最近学到java连接数据库(sql server),发现常用的我们有两种方法,那么这里我总结一下这两种方法怎么使用,还有它们的区别,还有我们一般要使用哪一种方法. 方法一:使用jdbc-odbc桥连接sql server,作为中间媒介连接数据库; 注意我们每次在连接数据库前都必须要引入sql包:import java.sql.*;接下来的步骤都是习惯性步骤,我这里就按照每一步的使用进行列举: 1.配置数据源:打开控制面版->管理工具->数据源(ODBC)->(一般而言我们使用用户DSN)

SQL SERVER2008数据库常识

连接数据库的方式: 1 .SQL SERVER 身份验证法:需要输入用户名和密码验证才能连接到数据库. 2 .Windows 身份验证法,点击连接,直接访问到数据库. 2.怎么在Microsoft SQL SERVER2008数据库上修改用户名和密码: 打开数据库--------点开安全性文件夹: 点开登录名的文件夹------找到自己数据库里面的所有数据库的用户名(在我本机使用的是sa),然后鼠标右击-----属性,在弹出页面修改用户名和密码即可. 3.Microsoft SQL SERVER

SQL SERVER2008历史日志查询

有需要找个工具能够查询sql server历史操作日志,比如误删除,误操作等,网上搜了好多,没有一个靠谱的.当然排除自己写sql记录操作日志,俺不懂sql语言.有可用的工具求推荐,感谢. log explorer for sql server 支持到SQL2005,以上不支持. sql server自带的管理--sql server日志 记录的登录和错误日志 强大的sql server profiler 主要作为实时分析进程或排错来用,不能查询历史日志,除非一直开着 查询transaction

php5.3.x连接MS SQL server2008

开篇 因为毕设老师需求的原因,虚拟旅游网站要求的数据库必须使用MS SQL server. 我最擅长的web编程语言是PHP,但是在PHP中链接MS SQL server是一件非常麻烦的事,我个人分析造成这种麻烦的原因:是因为使用PHP的一大优点就是免费,然而MS SQL server虽然图形化界面操作起来简单,但是其昂贵的授权费让人望而却步:加之MySQL不俗的性能和强大的社区支持,使得真正企业环境里,使用PHP + MS SQL server的人越来越少. 其实纵观网上的文章,之所以有人选择

不能连接MS Sql Server2008数据库的问题

前几天在计算机上安装了Win8企业版,又安装了MS Sql Server2008,本地开发比较顺畅,可是别的计算机的客户端却不能访问数据库. 先Ping一下,不通,可是它却能ping通别的计算机,可能是设置问题: 1.在运行里输入gpedit.msc,或者进入管理工具,找到计算机设置->windows设置->安全设置->本地策略->用户权限分配->拒绝从网络访问此计算机->删除guest用户,确定.(没有解决问题) 2.打开控制面板,进入管理工具,打开guest账户,G

Java连接Sql Server2008

参考:http://weistar.iteye.com/blog/1744871 准备工作: 1.下载JDBC驱动包:http://www.microsoft.com/zh-cn/download/details.aspx?id=21599 2.下载 完成后,点击运行,会提示你选择解压目录. 3.解压完成后,进入 <你解压到得目录>\sqljdbc_3.0\chs,有sqljdbc.jar和sqljdbc4.jar,这里使用sqljdbc4.jar 4.配置Sql Server2008端口:

sql server2008笔记

系统表和临时表 在sqlserver2008中数据表分为普通表,分区表,系统表和临时表 (1)系统表 在创建好的每个数据库中,系统都会自动添加一张系统表,该表存储了与系统有关的各种信息 例如sql server2008服务器配置,数据库设置,用户和表对象的描述信息 通常只有DBO权限的用户才能对该表进行操作 (2)临时表 临时表就是临时创建,不能永久保存,临时表分为两种,本地临时表和全局临时表 本地临时表的表名通常带有#标识符,它只对当前用户可见,当用户断开sql server2008 实例连接