C# NHibernate

首先,我们从NHibernate官网下载最新的nhibernate类库,创建一个示例数据库作为数据源。我们这里使用了SqlServer2008的数据库,用SqlServer2000也可以(NHibernate最大的特点之一就是支持现在流行的几乎所有的数据库),我们这里数据库名称是NHDemo,新建一个Person表,字段结构如下: 接下来,我们建立一个控制台项目,和一个类库项目,控制台项目作为输出结果。 项目文件建立好了,我们把需要用到的dll拷贝到dlls目录中。Iesi.Collections.dll,log4net.dll,NHibernate.dll可从压缩包的Required_Bins目录中找到,其他dll可从Required_For_LazyLoading\Castle目录找到。接下来,我们创建持久化对象,也就是数据库所映射的实体类。名称是:Person.cs 1 2 3 4 5 6 7 8 public class Person { public virtual int PersonId { get; set; } public virtual string Name { get; set; } public virtual int Age { get; set; } public virtual DateTime Birthday { get; set; } public virtual string Address { get; set; } } 接下来,我们创建这个实体类的关系映射文件。NHibernate就是通过这个文件找到我们的持久化对象和数据库表中的对应关系的。(我们要为Microsoft Visual Studio 2008添加编写NHibernate配置文件智能提示的功能。只要在下载的NHibernate文件包里找到configuration.xsd和nhibernate-mapping.xsd两个文件并复制到X:\Program Files\Microsoft Visual Studio 9.0\Xml\Schemas目录即可)名称是Person.hbm.xml 1 2 3 4 5 6 7 8 9 10 11 12

注意,此时映射文件需要修改属性,将“生成操作”改为“嵌入资源”。 下面我们编写NHibernateHelper,首先,我们要从ISessionFactory中获取一个ISession(NHibernate的工作单元)。ISessionFactory可以创建并打开新的Session。一个Session代表一个单线程的单元操作。 ISessionFactory是线程安全的,很多线程可以同时访问它。ISession不是线程安全的,它代表与数据库之间的一次操作。ISession通过ISessionFactory打开,在所有的工作完成后,需要关闭。 ISessionFactory通常是个线程安全的全局对象,只需要被实例化一次。我们可以使用单例(Singleton)模式在程序中创建ISessionFactory。这个实例我编写了一个辅助类NHibernateHelper 用于创建ISessionFactory并配置ISessionFactory和打开一个新的Session单线程的方法,之后在每个数据操作类可以使用这个辅助类创建ISession 。代码如下 1 2 3 4 5 6 7 8 9 10 11 12 13 14 public sealed class NHibernateHelper { private static ISessionFactory sessionFactory; static NHibernateHelper() { sessionFactory = new Configuration().Configure().BuildSessionFactory(); } public static ISession GetSession() { return sessionFactory.OpenSession(); } } 接下来,我们为控制台添加NHibernate配置信息,加入App.config应用程序配置文件,代码如下 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 NHibernate.Dialect.MsSql2005Dialect NHibernate.Connection.DriverConnectionProvider Server=(local);initial catalog=NHDemo;Integrated Security=SSPI NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle 从字面上可以看出dialect是数据库方言,connection.provider是数据库连接驱动,connection.connection_string是数据库连接字符串,其中,NHDemoDAL即为我们刚才建立的NHibernate项目文件。我们添加代码,来享受NHibernate带给我们的一切吧。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 static void Main(string[] args) { ISession session = NHibernateHelper.GetSession(); ITransaction tx = session.BeginTransaction(); Person p = new Person(); p.Name = "ZhangSan"; p.Age = 20; p.Birthday = DateTime.Now.AddYears(-20); p.Address = "Beijing"; session.Save(p); tx.Commit(); session.Close(); Console.WriteLine("添加成功!"); } 输出结果: 查看数据库: 由于采用了事务处理机制,每次修改数据后,都需要提交一个事物来完成操作。至此,我们的第一个NHibernate实例已经完成,是不是很简单呢?

posted @ 2012-05-12 10:38  Tammie-锴  阅读(1255)  评论(0编辑  收藏  举报