放着好好的EF不用,为什么要来玩NHibernate了?那是因为现在的工作内容就是维护一个比较老的项目,第一版是公司找外包做的,跟数据库打交道这块用的NHibernate,虽然都是ORM,但是既然维护这个项目有一段时间要一直搞,那还是趁着周末休息的时间先自己玩玩NHibernate,提前熟悉下.
什么是NHibernate:
1.开源的ORM(对象关系映射)框架.ORM可以被认为是,基于关系型数据库的数据存储,实现一个虚拟的面向对象的数据访问接口。理想情况下,基于这样一个面向对象的接口,持久化一个OO对象应该不需要要了解任何关系型数据库存储数据的实现细节。
2.简化数据库操作的开发.功能 : 将 .Net实体对象 直接持久化 到数据库.
在ADO.NET基础上进行封装,只需要少量代码就可以完成持久化工作,通过映射文件保存映射信息,在业务层以面向对象的方式编程,不用考虑数据保存形式
2.0=>使用Hibernate的"3个准备,7个步骤"
一.=> 3个准备 :
a-添加程序集;
b-配置文件;
c-添加实体类和实体配置文件;
a-添加程序集;
b-配置文件;
c-添加实体类和实体配置文件;
添加程序集:你可以去https://sourceforge.net/projects/nhibernate/下载程序集也可以用Nuget,咱们这里直接用Nuget安装
配置文件:无论你是自己下的还是用Nuget安装的都会有ConfigurationTemplates文件夹,找到MSSQL.cfg.xml复制一份作为你项目的NHibernate的配置文件,当项目使用很多框架的时候可能配置文件很多这个时候可以建一个配置文件的文件夹
添加实体类和实体配置文件:本次Demo是用的动软代码生成器生成的,当然了你也可以用其他的生成器比如MyGeneration之类的,这个不是重点
下面是本次小Demo的项目一览图(代码下载:NHibernate.rar数据库就采用NHibernate开源项目提供的示例数据库)
二.=>7个步骤 :
当然了第一二步骤每次都写一次多么麻烦,所以这里我假如了一个NHibernateHelper,
1 public class NHibernateHelper 2 { 3 private static ISessionFactory _sessionFactory; 4 private static object _myLocker = new object(); 5 private static ISessionFactory SessionFactory 6 { 7 get 8 { 9 if (_sessionFactory == null) 10 { 11 lock (_myLocker) 12 { 13 if (_sessionFactory == null) 14 { 15 _sessionFactory = new Configuration().Configure("NHibernateConfiguration/NHibernate.cfg.xml").BuildSessionFactory(); 16 } 17 } 18 } 19 return _sessionFactory; 20 } 21 } 22 public static ISession OpenSession() 23 { 24 try 25 { 26 return SessionFactory.OpenSession(); 27 } 28 catch (Exception ex) 29 { 30 31 return null; 32 } 33 34 } 35 36 }