NHibernate配置问题总结
2010-09-12 17:58
260 查看
NHIbernate为一款优秀的ORM框架,它为我们开发基于关系型数据库的系统提供的相当的便利性。网上关于它的介绍有很多(如/article/6947986.html),我这里就不在多说了。下面介绍我在用NHibernate中遇到的一些配置上的问题。
我使用的NHibernate版本是NHibernate-2.1.2.GA-bin。以前的版本没有用过,我觉得不同的版本下,NHibernate的配置是不一样的。也许有人说版本都不一样配置当然应该有区别了。但是我这里想说的是不仅仅是配置文件上的区别,各个版本下的NHibernate需要的其他一些程序集文件也是不一样的(让大侠见笑了,这个我以前真不知道,以为NHibernate版本升级更换一下新的NHibernate.dll就行了。)
下面我做的事情就是要将在NHibernate2.0.1.4000版本下能正常运行的程序换成2.1.2.4000遇到的一些问题。
环境:VS2008 SP1, SQLSERVER EXPRESS2005
NHibernate版本:NHibernate-2.1.2.GA
系统结构如下:
首先我将BLL下的NHibernate文件更换了。出现的第一个异常如下:
但是我查看了程序的Bin目录,发现是有Iesi.Collections.dll文件的。再说在2.0.1.4000运行不是能正常运行吗。?
我查看了一下Iesi.Collections.dll的版本,发现时程序集的版本确实是不一样。那么难道是NHibernate版本不同,他需要的其他程序集的版本也不一样吗。带着这个疑问,我用中间语言反汇编工具(在vs2008的命令提示窗口中输入ildasm即可以打开工具)看了一下两个版本下的NHibernate.dll,发现问题了。2.0.1.4000在IL DASM中显示元数据信息为如下图:
而2.1.2.4000中的元数据信息如下:
从上面两个图中可以清楚的看出:在这两个版本中所需要的Iesi中需要的版本是不一样的。也就是说如果你在2.1.2.4000中使用另外的一个Iesi版本,程序在加载2.1.2.4000的NHIbernate.dll时候,由于所需的其他程序集的版本必须要一直,否则,程序在运行时候就会抛异常。
在发现上面的问题后,我把NHibernate需要的其他动态库文件(如Iesi.Collections.dll文件)添加到bin目录中。
我替换的时候,在我的NHibernate配置文件hibernate.cfg.xml文件中都配置成”nhibernate-configuration-2.2“,这个不需要变化。(我有点不解,不同的版本下这个配置一样也行。我觉得似乎一个应该是2.1一个应该是2.2,出现问题时,我以为是这个问题,结果发现不是这个造成的)。
替换后程序运在运行中打开每个会话的时(ISession session = cfg.BuildSessionFactory().OpenSession();)
程序依然报如下异常:
由上述异常信息可以得知是因为没有配置造成的,所以应该在NHibernate.cfg.xml中添加对他的配置(2.0.1.4000中不需要对他进行配置)。配置如下:
<property name='proxyfactory.factory_class'>NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property>。
添加完配置后,运行程序依然抛异常,如下图:
根据异常的提示,我认为是缺少NHibernate.ByteCode.Castle.dll而导致程序加载出错,于是我将NHibernate.ByteCode.Castle.dll添加到Bin目录。继续编译后继续运行程序,继续抛异常,如下图:
由于这个程序集和Castle有关,由此我不得不怀疑相关的Castle的相关的程序集也应该需要。添加进来以后。继续运行程序,发现在使用HQL时候(IList<UserInfo> list = session.CreateQuery(" from UserInfo")),程序还是抛异常。如下图:
于是,我又添加Antlr3.Runtime.dll文件【当然得是上面异常中出现的版本】后,程序正常运行。
总结:NHibernate-2.1.2.GA版本下,做ORM开发,需要的动态库如下(以Castle而言):
1、NHibernate.dll 2、Antlr3.Runtime.dll 3、Castle.Core.dll 4、Castle.DynamicProxy2.dll 5、Iesi.Collections.dll 6、NHibernate.ByteCode.Castle.dll
7、log4net.dll
NHibernate-3.0.0下配置依然需要上述7个库文件,只是版本不一样罢了。
当然,如果使用的不是Castle,3、4就应该是相应的动态库了!
后记:NHibernate发展到今天【已经推出3.0版本】,依然有许许多多的追随者,我想应该是有很多原因的。即是今天MS同样推出了ORM技术LINQ、Entity FrameWork等等。我泛泛使用后觉得,Nhibernate的使用还是比他们都麻烦点,主要是配置方面。
好了,就絮叨到这。希望对初学NHibernate的朋友有所帮助。
我使用的NHibernate版本是NHibernate-2.1.2.GA-bin。以前的版本没有用过,我觉得不同的版本下,NHibernate的配置是不一样的。也许有人说版本都不一样配置当然应该有区别了。但是我这里想说的是不仅仅是配置文件上的区别,各个版本下的NHibernate需要的其他一些程序集文件也是不一样的(让大侠见笑了,这个我以前真不知道,以为NHibernate版本升级更换一下新的NHibernate.dll就行了。)
下面我做的事情就是要将在NHibernate2.0.1.4000版本下能正常运行的程序换成2.1.2.4000遇到的一些问题。
环境:VS2008 SP1, SQLSERVER EXPRESS2005
NHibernate版本:NHibernate-2.1.2.GA
系统结构如下:
首先我将BLL下的NHibernate文件更换了。出现的第一个异常如下:
但是我查看了程序的Bin目录,发现是有Iesi.Collections.dll文件的。再说在2.0.1.4000运行不是能正常运行吗。?
我查看了一下Iesi.Collections.dll的版本,发现时程序集的版本确实是不一样。那么难道是NHibernate版本不同,他需要的其他程序集的版本也不一样吗。带着这个疑问,我用中间语言反汇编工具(在vs2008的命令提示窗口中输入ildasm即可以打开工具)看了一下两个版本下的NHibernate.dll,发现问题了。2.0.1.4000在IL DASM中显示元数据信息为如下图:
而2.1.2.4000中的元数据信息如下:
从上面两个图中可以清楚的看出:在这两个版本中所需要的Iesi中需要的版本是不一样的。也就是说如果你在2.1.2.4000中使用另外的一个Iesi版本,程序在加载2.1.2.4000的NHIbernate.dll时候,由于所需的其他程序集的版本必须要一直,否则,程序在运行时候就会抛异常。
在发现上面的问题后,我把NHibernate需要的其他动态库文件(如Iesi.Collections.dll文件)添加到bin目录中。
我替换的时候,在我的NHibernate配置文件hibernate.cfg.xml文件中都配置成”nhibernate-configuration-2.2“,这个不需要变化。(我有点不解,不同的版本下这个配置一样也行。我觉得似乎一个应该是2.1一个应该是2.2,出现问题时,我以为是这个问题,结果发现不是这个造成的)。
替换后程序运在运行中打开每个会话的时(ISession session = cfg.BuildSessionFactory().OpenSession();)
程序依然报如下异常:
由上述异常信息可以得知是因为没有配置造成的,所以应该在NHibernate.cfg.xml中添加对他的配置(2.0.1.4000中不需要对他进行配置)。配置如下:
<property name='proxyfactory.factory_class'>NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property>。
添加完配置后,运行程序依然抛异常,如下图:
根据异常的提示,我认为是缺少NHibernate.ByteCode.Castle.dll而导致程序加载出错,于是我将NHibernate.ByteCode.Castle.dll添加到Bin目录。继续编译后继续运行程序,继续抛异常,如下图:
由于这个程序集和Castle有关,由此我不得不怀疑相关的Castle的相关的程序集也应该需要。添加进来以后。继续运行程序,发现在使用HQL时候(IList<UserInfo> list = session.CreateQuery(" from UserInfo")),程序还是抛异常。如下图:
于是,我又添加Antlr3.Runtime.dll文件【当然得是上面异常中出现的版本】后,程序正常运行。
总结:NHibernate-2.1.2.GA版本下,做ORM开发,需要的动态库如下(以Castle而言):
1、NHibernate.dll 2、Antlr3.Runtime.dll 3、Castle.Core.dll 4、Castle.DynamicProxy2.dll 5、Iesi.Collections.dll 6、NHibernate.ByteCode.Castle.dll
7、log4net.dll
NHibernate-3.0.0下配置依然需要上述7个库文件,只是版本不一样罢了。
当然,如果使用的不是Castle,3、4就应该是相应的动态库了!
后记:NHibernate发展到今天【已经推出3.0版本】,依然有许许多多的追随者,我想应该是有很多原因的。即是今天MS同样推出了ORM技术LINQ、Entity FrameWork等等。我泛泛使用后觉得,Nhibernate的使用还是比他们都麻烦点,主要是配置方面。
好了,就絮叨到这。希望对初学NHibernate的朋友有所帮助。
相关文章推荐
- vs2013下配置openCV3.1.0出现的问题总结
- 工作总结34 Tomcat7.0.79参数配置的问题
- Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks程序(Python)配置问题总结
- log4j与flume整合配置(实现故障转移FailoverLog4jAppender)及问题总结
- Ubuntu14.04配置OpenCL版本caffe (AMD显卡)---- 问题总结(持续更新)
- 关于在ECLIPSE中配置weblogic的问题总结:
- 总结VMware中安装centos7并配置jdk、tomcat、mysql中遇到的问题
- Git在Xcode中的配置与使用常见问题总结
- android学习之路--android studio安装,主题,各种配置以及快捷键,注释,以及其他各种问题总结
- Apatch Tomcat8.0 的配置遇到问题全面总结
- Spring学习总结(20)——Spring加载多个项目properties配置文件问题解决
- Microsoft Dynamics CRM 2011 IFD 配置出现的问题 总结
- mysql安装配置乱码无法开启服务问题总结
- J2SE配置问题—;expected错误总结
- 新手学struts2之配置Struts2及问题总结
- mySql8小时问题总结,DBCP,C3P0数据源配置方法。
- Eclipse配置不同JDK版本遇到的一些问题与总结
- FastCGI进程意外退出,http错误404.3-NotFound 由于扩展配置问题 dll找不到找定的模块等 dz问题总结
- 终于配置好了winform下的Nhibernate+Spring.Net的框架模板,遇到的问题还真多...不过成熟了很多....
- IIS PHP 配置 问题总结