Welcome

首页 / 软件开发 / .NET编程技术 / 我的NHibernate之路(1)---基本配置篇

我的NHibernate之路(1)---基本配置篇2010-12-21 博客园 tyb1222对初学者来说,学习NHibernate第一个障碍便是他的配置。确实,相对于 LINQ TO SQL或者是Entity FrameWork来说,他的配置太复杂了,各个实体类对 应的映射文件、以及NHibernate自身的配置等等,对象刚学习NHibernate的新手 来说,确实是摆在他们面前的一道坎。那么NHibernate的配置到底应该注意哪些 问题?又该如何去进行配置呢?俗话说“给人鱼不如授人以渔”。下面我就说说 自己在使用NHibernate配置的过程,以及在配置中出现问题后,怎样去解决这些 问题。

先介绍我使用的环境以及Nhibernate的版本。

开发环境:VS2008 SP1、 NHibernate-2.1.2.GA-bin.

1、NHibernate如何配置

Nhibernate的配置,当然可以手写进行配置的。但是在编写映射文件的时候 有没有智能提示呢?答案是有的!那怎样才能在VS中让我们在编写、修改映射文 件的时候出现智能提示呢。?在我学习NHibernate的博客 (http://www.cnblogs.com/lyj/archive/2008/10/14/1310913.html)中,永哥 (我的名字也有个永字,^_^)说“在下载的NHibernate里找到 configuration.xsd和nhibernate- mapping.xsd两个文件(这个文件我们可以在 srcNHibernate.Config.Templates文件夹下找到)并复制到X: Program FilesMicrosoft Visual Studio 9.0XmlSchemas目录即可"。我刚开始以为是 NHibernate小组在开发Nhibernate后将源代码发布了(因为有SRC,我想应该是源 代码的文件夹吧!),里面有这两个文件。后来我试着去找NHibernate的源码, 结果找到的都是别人用NHibernate开发取来的例子的源码。因为我就没有找到, 最后不得不放弃。我把下载到的NHibernate-2.1.2.GA-bin解压后,在 Required_Bins文件夹下 nhibernate-mapping.xsd、nhibernate- configuration.xsd复制到C:Program FilesMicrosoft Visual Studio 9.0 XmlSchemas下,试编写映射文件,结果发现有了智能提示了。【注:我这里并 不是他永哥说错了,因为他发表他那边博文的时候是08年,现在都2010了, Nhibernate的版本是改了又改,文件名肯定也会发生变化。我用是的版本比他的 新。我学习Nhibernate也是从永哥的博客开始的。另外谢谢永哥这么好的博文! 】

2、NHibernate在我们项目中需要的程序集动态库如下:NHibernate.dll、 NHibernate.ByteCode.Castle.dll、Antlr3.Runtime.dll、 Iesi.Collections.dll、 log4net.dll。另外:如果你的NHibernate的代理工厂 配置为Castle【即对property name="proxyfactory.factory_class"的配置】, 则还需要Castle.Core.dll、 Castle.DynamicProxy2.dll。当然若你配置的代理 工厂类为LinFu,则需要他所对应的程序集文件。在 NHibernate.dll2.0.1.4000 不设置它也行。但是2.1.2下必须设置。说明:设置它的作用就是我们需要在程 序中用什么样的方式实现延迟加载

3、映射文件的设置:所有实体类对应的映射的XML文件应该设置为“嵌入资 源”。否则系统程序会异常。如:

另外,对各个实体类的映射文件中的unsave-value的设置,具体请参见我的 CSDN的博客 (http://blog.csdn.net/tyb1222/archive/2010/09/22/5900923.aspx)我这里 就不做说明了。

4、NHibernate的配置文件的设置:在我们下载的NHibernate-2.1.2.GA-bin 解压后,会有一个 Configuration_Templates文件夹。他里面存放的是 Nhibernate所支持的各种数据库的配置。选择你用的数据库类别,将相应的 xml 文件拷贝到配置文件中。注意:在Configuration_Templates文件夹下的 SQLSERVER数据库的配置文件中,需添加对应实体类的程序集的配置【如: mapping assembly="Model"】,否则会报如上3中所出现的异常。我觉得默认的 配置模板中就应该加上对实体类所在程序集的配置,我们改相应的程序集名称就 行了,但是在2.1.2.GA中却并没有这样做。

5、注意你的映射文件中class 里属性的配置,若配置不正确变回提示如下异 常:

通常这样的异常是由于系统找不到由映射文件制定的程序集而产生

6、NHibernate-2.1.2的配置与以前版本不一样的地方:必须设置延迟加载的 方式、Nhibernate的配置不必设置为"始终复制",默认即可、所需的程序集文件 比以前多【因为延迟加载现在必须设置,所以涉及的动态库文件也是必不可少的 】

总结:NHibernate-2.1.2配置需注意将映射文件设置为嵌入的资源、对从配 置模板中拷贝过来的必须添加对实体类程序集配置以及我们需要的数据库连接、 如果我们是实体类的映射文件中不申明不使用延迟加载则对应的实体类所有的属 性方法必须为virtual、NHibernate各个版本下所需要的其他库文件必须与之配 套使用,应注意版本。