我的NHibernate之路(1)---基本配置篇

  对初学者来说,学习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两个文件(这个文件我们可以在src\NHibernate.Config.Templates文件夹下找到)并复制到X:\Program Files\Microsoft Visual Studio 9.0\Xml\Schemas目录即可"。我刚开始以为是NHibernate小组在开发Nhibernate后将源代码发布了(因为有SRC,我想应该是源代码的文件夹吧!),里面有这两个文件。后来我试着去找NHibernate的源码,结果找到的都是别人用NHibernate开发取来的例子的源码。因为我就没有找到,最后不得不放弃。我把下载到的NHibernate-2.1.2.GA-bin解压后,在Required_Bins文件夹下nhibernate-mapping.xsd、nhibernate-configuration.xsd复制到C:\Program Files\Microsoft Visual Studio 9.0\Xml\Schemas下,试编写映射文件,结果发现有了智能提示了。【注:我这里并不是他永哥说错了,因为他发表他那边博文的时候是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各个版本下所需要的其他库文件必须与之配套使用,应注意版本。

posted @ 2010-09-18 15:51  tyb1222  阅读(919)  评论(0编辑  收藏  举报