NHibernate初探!

关注NHibernate已N久了,由于各种原因一直处于理论状态,得些时间于是实践一把!
去年下的0.8版感觉有些老了,于是从SF上down下最新版本NHibernate-1.2.0.Alpha1-debug,呵,好久不见又多出好多新东东...

一,从例QuickStar例子说起
down下NH1.2后,竟然不能编译,查之,竟然少了SettingsFactory.cs及SqlLoader.cs两个文件,算了,还是下个DEMO看一下吧,于是就下了

DDLLY兄的QuickStar例子,但还是run不了,哦,user.hbm.xml,hibernate.cfg.xml未设为嵌入资源,go on,成功......
还算顺利,不过看到有configuration有几种配置(http://www.i170.com/article/22290),于是试一把
//Configuration cfg = new Configuration().Configure();
Configuration cfg = new Configuration();
把上面使用hibernate.cfg.xml资源文件的注释,改为下面使用app.config文件的,加入app.config文件
run,succeed!

二,DIY个DEMO
New控制台Project,引用nunit.framework,NHibernate(Ver1.2.0.Alpha1),实体类,Map文件,hibernate.cfg.xml文件
记得数据库用户名,密码
完成TestFixture测试类,build成功,Debugger调试

session.Save(newUser);出错了,错误信息为:Unknown entity class: NHibernateTest.User
或Configuration cfg = new Configuration().Configure();处出错,信息为:Type 'NHibernateTest.User' cannot be specified as proxy
why?调了半天还是没有一点头绪,竟然不认识实体类,Quickstar中不是很正常吗?
没办法,只有求助csdn(http://community.csdn.net/Expert/topic/4883/4883788.xml?temp=.3518946),有仁兄给出答案
为每实体类属性加上virtual关键字,这招还非常强,实体信息正常的插入至数据库...

虽然我的问题似乎得了解决,但我对这种解决方案存在疑惑,为什么QuickStar例子什么也没加,也可以正常呢?
于是决定看NH的源码,但我DOWN的源码不能编译,因为少文件啊,刚才那位仁兄在贴子中回复少的这两个文件可以删除?
但我用ILDASM.EXE看一下我引用的NHibernate.dll,得到的结果是SettingsFactory类是有存在的,是否此类必须存在,这个问题我决定查看一
下其它的版本,在0.8版本中我看到此类是必须需要的,它是BuildSessionFactory时用到的。
用ILDAMS查看Nhibernate.dll的0.8版本及1.2版本,我发现对于SettingsFactory类的实现基本是一样,虽然现在NH1.2版本没有,但能否考虑
把0.8版本中的两个文件加入到1.2版本中呢?于是我试一下,结论是我的想法是错误的!其中有些变量在NH1.2版本中都没有实现,如:

hibernate.use_outer_join(允许使用外连接抓取。) 在NH1.2版本中都找不到定义实现,所以说,NH1.2版本应该有很大改动(没看官方文章惹的

祸啊),NH1.2改动这么大,其它版本的呢?于是我又DOWN了NH1.0.1,查看之,没错,是存在的。

上面把NH0.8中的文件复制到NH1.2中去用荒谬的想法,虽然结论是失败的,但通过对NH源码的查看,我意识到Unknown entity class这个异常很

可能就是由于版本问题产生的,我程序中用的版本是NH1.2,新版本应该或多或少都会存在些不足的地方,虽然在实体类的属性加上Virtual可以解

决问题,但我更加相信这是缺陷...

最后我引用NH1.0.1的NHibernate.dll到我的测试项目,一切OK,也不用加Virtual了,都是偶DOWN的新版本若的祸,呵呵,被NHibernate晃点两天

的问题终于可以结束了!

三,附上一些测试文件
//User.cs

User实体类

//User.hbm.xml

User.hbm.xml

//hibernate.cfg.xml


<? xml version = " 1.0 "  encoding = " utf-8 "   ?>
< hibernate - configuration xmlns = " urn:nhibernate-configuration-2.0 " >
 
< session - factory >
  
<!--  属性  -->
  
< property name = " connection.provider " > NHibernate.Connection.DriverConnectionProvider </ property >
  
< property name = " connection.driver_class " > NHibernate.Driver.SqlClientDriver </ property >
  
< property name = " connection.connection_string " > server = 127.0 . 0.1 ;database = user;uid = sa;pwd = XX; </ property >
  
< property name = " show_sql " > false </ property >
  
< property name = " dialect " > NHibernate.Dialect.MsSql2000Dialect </ property >
  
< property name = " use_outer_join " > true </ property >
  
< property name = " query.substitutions " > true   1 false   0 , yes  ' Y ' , no  ' N ' </ property >
  
<!--  映射文件  -->
  
< mapping assembly = " NHibernateTest "   />
 
</ session - factory >
</ hibernate - configuration >

//NUnit测试类

Test
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值