zoukankan      html  css  js  c++  java
  • NHibernate配置文件问题

    今天开发的时候又遇到一个极其奇怪的问题,本人使用asp.net 2.0+NHibernate开发一个Publish系统,在使用NHibernate做持久层访问数据库的时候收到Exception:element was not found in the configuration file.
    但是很奇怪,我都是使用的跟标准一样的配置方法啊,并且是用codesmith生成的配置文件和Persistent Class,应该不会有错啊?????
    仔细观察配置文件后,发现有hibernate-mapping xlmns=”urn:nhibernate-mapping-2.0”,似乎不对,我的nhibernate的版本似乎是1.2的,那是不是应该将nhibernate-mapping改成2.2呢???先试试吧,将xlmns改成urn:hibernate-mapping-2.2,然后通过帮助文件知道要把所有的persistent class中的properties都改成virtual的。然后build,run,debug。
    靠。。。。。居然还是不对,但是这个时候的错误变成了Could not compile the mapping document,应该是出了其他问题了。
    怎么办呢???自己搞定吧,把NHibernate的solution找出来,编译出assembly,挂到我的项目中,然后打上断点,看看是那个该死的地方出了毛病
    ………….
    哈哈,搞定了,原来是这样的。先来看看我原先的mapping file:
    <hibernate-mappingxmlns="urn:nhibernate-mapping-2.2">
            <classname="MyPublisher.Entities.ModuleInfo, MyPublisher.Entities"table="`Module`">
                    <idname="Id"type="String"unsaved-value="null">
                            <columnname="ModuleId"length="50"sql-type="varchar"not-null="true"unique="true"index="PK_Module"/>
                            <generatorclass="native" />
                    </id>
                    <propertyname="ModuleName"type="String">
                            <columnname="ModuleName"length="200"sql-type="varchar"not-null="false"/>
                    </property>
                    <propertyname="ModuleType"type="String">
                            <columnname="ModuleType"length="50"sql-type="varchar"not-null="false"/>
                    </property>
                    <propertyname="DirectionId"type="String">
                            <columnname="DirectionId"length="50"sql-type="varchar"not-null="false"/>
                    </property>            
        <propertyname="IconUrl"type="String">
          <columnname="IconUrl"length="100"sql-type="varchar"not-null="false"/>
        </property>
            </class>
    </hibernate-mapping>
    然后我发现了一个问题,在nhibernate中assembly load的时候,找的是一个叫做MyPublisher.Entities的程序集,但是我的项目中只有Entities的程序集,估计是codesmith的模板有问题,导致名字出错了,哎~~~~原来如此简单,修改class name=”MyPublisher.Entities.ModuleInfo, Entities”之后,问题解决。
    在解决问题之后,通过对NHibernate的内部代码的解析,发现实际上不用把程序集写在class name里面也是可以的,可以在hibernate-mapping的时候来做:
    <hibernate-mappingxmlns="urn:nhibernate-mapping-2.2"assembly="Entities">
    这样也是可以的。
    还有如果想要在写配置文件或者mapping文件的时候vs IDE能够提供tips,或者code completion,可以将download下来的$nhibernate$\src\NHibernate-src\src\NHibernate(可能由于版本不同会有所变化,可以用search的办法)目录中的nhibernate-*.xsd文件copy到$.net home$\Common7\Packages\schemas\xml下面,这样在写这些文件的时候就方便多了。
    又小小的升了点经验值了,希望能早日长段。^_^

  • 相关阅读:
    推荐一款超好用的工具cmder
    golang初探与命令源码分析
    LAMP环境部署物联网项目
    linux上安装LAMP笔记
    scrapy实战--爬取最新美剧
    scrapy实战--爬取报刊名称及地址
    scrapy简单入门及选择器(xpathcss)
    phantomJs页面截图
    eclipse工具的安装配置
    BeautifulSoup爬虫基础知识
  • 原文地址:https://www.cnblogs.com/aaa6818162/p/1538348.html
Copyright © 2011-2022 走看看