摘要
这篇文章介绍了如何创建一个简单的使用NHibernate的控制台应用程序,包括使用NuGet、简单的配置、单表映射、对NHibernate配置文件添加智能提示、使用ISessionFactory和ISession。
1. 环境准备
Visual Studio 2015、SQL Server 2008或者SQL Server 2008 R2。
2. 创建工程
1)创建空控制台应用程序NHibernateDemoApp。
2)添加NHibernate到工程。右键NHibernateDemoApp工程,选择"Manage NuGet Packages..."。
3)在打开的"NuGet Packages Manager"上选择"Browse",输入"NHibernate",查出最新的NHibernate版本,选择版本4.0.0.4000,点击"Install"。
在弹出的对话框里选择"OK"。看到将安装NHibernate.4.0.4.4000和Iesi.Collections.4.0.0.4000。
安装完成后,在Output里出现这个Successfully的结果。
再来看NHibernateDemoApp的Reference。已经添加了NHibernate和Iesi.Collections进来。
也可以到NHibernate官网去下载最新的版本。下载地址NHibernate
3. 创建SQL Server数据库NHibernateDemoDB
创建表Customer
设置Id为主键,设置Id列的Identity属性。
4. 创建Customer类
1 using System; 2 3 namespace NHibernateDemoApp 4 { 5 public class Customer 6 { 7 public virtual int Id { get; set; } 8 public virtual string FirstName { get; set; } 9 public virtual string LastName { get; set; } 10 public virtual double AverageRating { get; set; } 11 public virtual int Points { get; set; } 12 public virtual bool HasGoldStatus { get; set; } 13 public virtual DateTime MemberSince { get; set; } 14 public virtual CustomerCreditRating CreditRating { get; set; } 15 public virtual string Street { get; set; } 16 public virtual string City { get; set; } 17 public virtual string Province { get; set; } 18 public virtual string Country { get; set; } 19 } 20 21 public enum CustomerCreditRating 22 { 23 Excellent, VeryVeryGood, VeryGood, Good, Neutral, Poor, Terrible 24 } 25 }
注意:
- 所有属性都为virtual,为了支持Lazy Loading。
- 所有属性的访问属性都为Public,不然NHibernate找不到该属性。
- 类属性是Public,不然NHibernate找不到该类。
5. 创建Customer.hbm.xml
<?xml version="1.0" encoding="utf-8" ?> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="NHibernateDemoApp" namespace="NHibernateDemoApp"> <class name="Customer" table="Customer"> <id name="Id"> <generator class="native"/> </id> <property name="FirstName" not-null="true"/> <property name="LastName" not-null="true"/> <property name="AverageRating"/> <property name="Points"/> <property name="HasGoldStatus"/> <property name="MemberSince" /> <property name="CreditRating" type="CustomerCreditRating"/> <property name="Street"/> <property name="City"/> <property name="Province"/> <property name="Country"/> </class> </hibernate-mapping>
- 注意hibernate-mapping的assembly、namespace属性要填写正确
- class的name属性表示类名,table是映射的表名,如果类名称和表名称相同,可以省略table属性
- property的name属性是类的属性名,如果类属性名和表的列名相同,可以省略column属性
- property的type属性表示.net类属性映射的NHibernate数据类型。如果是int、bool、double这样的.net基础数据类型,则可以省略
- property的type属性如果是DateTime、string,也可以省略
- property的not-null属性对应关系表的列的nullable属性,默认值是false。因此,如果允许为空,则可以省略
- id表示主键,name为主键名,<generator class="native"/>表示数据表的主键按简单Identity的自增算法生成新记录主键值(NHibernate提供了多种主键值生成算法,这里只用最简单的Identity算法)
- 文件名必须以.hbm.xml结尾
6. 修改Customer.hbm.xml文件属性
- Build Action: Embedded Resource
- Copy to Output Directory: Copy always
- 如果不设置这两个属性,后面执行的时候会出错
7. 为NHibernate工程的xml配置文件添加智能提示
点击工具栏上的XML->Schma,打开"XML Schemas"窗口。
点击"Add",选择"nhibernate-configuration.xsd"和"nhibernate-mapping.xsd"两文件。这两文件存在于当前工程下的"$\packages\NHibernate.4.0.4.4000"文件夹下。选择后点"OK"。
加入之后,再编辑Customer.hbm.xml文件会出现智能提示。
有时候重启Visual Studio后,智能提示都会消失了,要重新加载这两个文件。
8. 修改Program类
1 using NHibernate.Cfg; 2 using NHibernate.Dialect; 3 using NHibernate.Driver; 4 using System; 5 using System.Reflection; 6 7 namespace NHibernateDemoApp 8 { 9 class Program 10 { 11 static void Main(string[] args) 12 { 13 var cfg = new Configuration(); 14 15 cfg.DataBaseIntegration(x => 16 { 17 x.ConnectionString = "Data Source=localhost;Initial Catalog=NHibernateDemoDB;Integrated Security=True;Connect Timeout=15;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False"; 18 x.Driver<SqlClientDriver>(); 19 x.Dialect<MsSql2008Dialect>(); 20 }); 21 cfg.AddAssembly(Assembly.GetExecutingAssembly()); 22 var sefact = cfg.BuildSessionFactory(); 23 using (var session = sefact.OpenSession()) 24 { 25 using (var tx = session.BeginTransaction()) 26 { 27 //perform database logic 28 tx.Commit(); 29 Console.WriteLine("Well Done"); 30 } 31 Console.ReadLine(); 32 } 33 } 34 } 35 }
- Configuration类对象相当于ADO.Net的Connection对象,但是他包含更丰富的配置信息。
- 调用cfg.DataBaseIntegration方法进行配置,这里配置了:数据库连接字符串、使用连接的Driver类SqlClientDriver和使用Dialect类MsSql2008Dialect
- cfg.AddAssembly(Assembly.GetExecutingAssembly());是告诉NHibernate去哪里找xml映射文件信息。这里是从正在执行的assembly中查找
- SessionFactory和Session是NHibernate的基础类,SessionFactory编译所有的元数据,产生Session。Session封装了所有的NHibernate方法
9. 执行程序,得到运行结果
到此为止,我们setup了一个简单的NHibernate环境,包括安装NHibernate,加入智能提示,添加映射文件。
下一节介绍简单的NHibernate查询,添加,修改,删除操作。
作者:丹尼大叔
出处:http://www.cnblogs.com/uncle_danny
本文版权归作者和博客园共有,欢迎转载。但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。