今天延续昨天的工作,继续进行,昨天让我对Nh有了进一步的理解和应用。今天继续编写自己的一个程序,目的:
1、使用 Nhibernate 进行持久层管理
2、3层架构,可以应用到 WinForm 程序,也可应用到 WebForm程序。
3、Model 层的CURD.
4、BLL/DAL层方面的管理。
结果出现了一下的错误,进行了排查之后,呵呵~ 用Nhibernate终于成功的进行了一个表数据的添加。
错误如下,可能大家犯过和我类似的错误吧,下面是我的解决方法:
====================================================================
结构框架
SysMgr 执行程序 命名空间 SysMgr 程序集 SysMgr
Model // 命名空间 Rizi.SysMgr.Model 程序集 Model
BLL //暂时没有用
DAL //暂时没有用
1、未处理的“NHibernate.HibernateException”类型的异常出现在 NHibernate.dll 中。
其他信息: A ManifestResourceStream could not be created for the resource Rizi.SysMgr.Model.hibernate.cfg.xml in Assembly SysMgr, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
解决:
源码:
Configuration cfg = new Configuration().Configure(
Assembly.GetExecutingAssembly(), //当前代码正从中运行的程序集。
NAMEPLACENAME + ".hibernate.cfg.xml");
出错原因 NAMEPLACENAME = "Rizi.SysMgr.Model" 写成了Model层的命名空间,这个是错误的。
hibernate.cfg.xml 选择“嵌入的资源”
把 NAMEPLACENAME 改成 “SysMgr” ,错误解除。
2、Could not add assembly Rizi.SysMgr.Model
解决:在hibernate.cfg.xml文件的下面是:
<!-- 映射文件 -->
<!--程序将加载Rizi.SysMgr.Model命名空间所有的映射文件(*.hbm.xml)-->
<mapping assembly="Rizi.SysMgr.Model" />
这个是不对的,因为NHibernate加载的是程序集,可是 Rizi.SysMgr.Model 的程序集是 Model,所以无法加载。改成
<!-- 映射文件 -->
<!--程序将加载Rizi.SysMgr.Model命名空间所有的映射文件(*.hbm.xml)-->
<mapping assembly="Model" />
错误消失。
3、Could not compile the mapping document
解决:在Model的程序集中自己的“MEntitySysItem.hbm.xml”文件中:
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Rizi.SysMgr.Model" namespace="Rizi.SysMgr.Model">
其中 assembly="Rizi.SysMgr.Model" 也是和上面犯的错误一样,所以无法编译
改成:
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Model" namespace="Rizi.SysMgr.Model">
错误解除。
注意,*.hbm.xml 都是”嵌入的资源“
经过以上3个 错误的解除,程序顺利执行。
Nhibernate 初探到此告一段落。