开始学习NHibernate了 (2):配置篇

本文介绍了NHibernate的基本概念及其在项目中的应用。通过实例演示了如何搭建NHibernate环境,并解决了一系列配置过程中遇到的问题。

这几天一直在看Nhibernate的相关资料,可是一直比较迷惑,原来自己是做关系型数据库的,对对象也比较了解,但是持久层开发这个东西,还是没有感觉出他的好处来,然后看了《精通Hibernate-孙卫琴》写的大致有个了解。   

原来:
NHibernate这个就是管理持久成的一些东西,而那些*.hbm.xml则是对数据库层的一个映射,然后用Nhibernate进行管理这些映射后的对象,当然还是要在这之上添加业务层的。总之,一句话:就是在关系数据库底层和业务层建立了一个持久层,这个持久层不做其他用处,就是翻译数据库的数据库表或者关系,变成对象。然后让程序员能面向对象进行编写,而不再和数据库有所联系。所以,该进行关系数据库设计还是要关系设计(实体、关系),该对象编程的话,就用Nhibernate来映射的表进行编程就是了。

明白了这一层,然后自己开始学习编写NHibernate的程序,网上有很多这样的例子。后来下了个"DDLLY命名空间- 博客园"配置篇进行学习。下面推荐几个我这几天去的几个博客站:

1、海天.net http://www.seaskyer.net/Index/Catalog44_2.html

2、NHibernate的灵活配置 http://www.cnblogs.com/renrenqq/archive/2006/08/02/466056.html

3、NHibernate的配置信息 http://www.cndaliu.com/Details/103c54e9-f88a-41af-aa10-d72f1e0e2c28.aspx

4、还有无心之柳的博客 http://www.cnblogs.com/9527

不过上面的看了,还是一头雾水,还是有例程比较好,DDLLY命名空间 的nhibernate里面到有例程,可是,里面的那段《灵活配置》使用 Nunit进行测试编写的,那个Nunit我现在还是不很熟悉,后来下了个学了学,呵呵~看来是很不错的。Nunit的学习也给大家推荐个地方:『 天道酬勤 』 www.LiTianping.com 李天平的博客  http://blog.csdn.net/litp/archive/2005/11/11/527684.aspx  上面说的比较详细。

下面开始了我的学习配置之路,当然也出现了一些问题,下面一一道来:

1、问题:DDLLY.MyDoc.NHibernateTest.ConfigurationTest.Test.ConfigureFixture.TestConfigure1 : NHibernate.MappingException : DDLLY.MyDoc.NHibernateTest.ConfigurationTest.User.hbm.xml(2,2): XML validation error: 未能找到元素“urn:nhibernate-mapping-2.0:hibernate-mapping”的架构信息。
  ----> System.Xml.Schema.XmlSchemaException : 未能找到元素“urn:nhibernate-mapping-2.0:hibernate-mapping”的架构信息。

解答: 先你确定你是否引入了NHibernate的程序集及使用的NHibernate的版本
如果是1.0x或之前的请使用2.0
如是是1.2.0GA或之后的使用2.2
因为我的Nhibernate是1.2.xGA的,所以在DDLLY的那个例程里面是1.0x的,所以出现了这个错误。然后更改了hibernate.cfg.xml里面的“<hibernate-mapping xmlns="urn:nhibernate-mapping-2.0">”  成“<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">” 测试成功,当然别忘记更改那个“User.hbm.xml”里面相应的信息阿。

2、virtual 问题

解答:因为DDLLY给的例程是NH1.0x的,现在我用的是1.2.0的,所以在User.cs文件中的属性没有加入 virtual 关键字。加上测试通过。

3、问题:DDLLY.MyDoc.NHibernateTest.ConfigurationTest.Test.ConfigPropertyFixture.TestConfigProperty : NHibernate.LazyInitializationException : Could not initialize proxy - the owning Session was closed.

解答:接下来在测试“ConfigPropertyFixture.cs”出现了上面的问题,也不知道为什么,后来找到了相关资料。(系统升级NHibernate遇到的问题 http://www.cnflysky.com/?uid-1-action-viewspace-itemid-26)按照这个解答,把“TestHelper.cs”中的“ try      {            user = session.Load(typeof(User), 1) as User;            }            finally   {”中的Load改成Get即可。

经过以上的该写,测试通过!!!

 

 


 


 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

若行若冲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值