这几天一直在看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即可。
经过以上的该写,测试通过!!!
本文介绍了NHibernate的基本概念及其在项目中的应用。通过实例演示了如何搭建NHibernate环境,并解决了一系列配置过程中遇到的问题。

5812

被折叠的 条评论
为什么被折叠?



