开始学习NHibernate了 (3):实验及排错篇

时间:2022-07-07 03:17:10

今天延续昨天的工作,继续进行,昨天让我对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 初探到此告一段落。