摘要
这篇文章介绍了如何创建一个简单的使用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官网去下载最新的版本。下载地址
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 CustomerCreditRating22 {23 Excellent, VeryVeryGood, VeryGood, Good, Neutral, Poor, Terrible24 }25 }
注意:
- 所有属性都为virtual,为了支持Lazy Loading。
- 所有属性的访问属性都为Public,不然NHibernate找不到该属性。
- 类属性是Public,不然NHibernate找不到该类。
5. 创建Customer.hbm.xml
- 注意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 Program10 {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();19 x.Dialect ();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查询,添加,修改,删除操作。