zoukankan      html  css  js  c++  java
  • Nhibernate Unknown entity class 的解决办法

    概述:

         当运行 session.Save(tnp);时,出现这个"Unknown entity class: TestCleanSnow.TestNhibernatePerson"这个异常.

         映射文件 TestNhibernatePerson.hbm.xml如下:  

    <?xml version="1.0" encoding="utf-8"?>
    <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="TestCleanSnow" namespace="TestCleanSnow">
      
    <class name="TestCleanSnow.TestNhibernatePerson,TestCleanSnow" table="TEST_NHIBERNATE_PERSON" lazy="false">
        
    <id name="Usertestid" column="USERTESTID" type="Decimal">
          
    <generator class="sequence">
            
    <param name="sequence">emp_sequence</param>
          
    </generator>
        
    </id>
        
    <property type="string" not-null="true" length="6" name="Usertestname" column="USERTESTNAME" />
      
    </class>
    </hibernate-mapping>

    操作代码如下:

    Configuration config = new Configuration();              
                    ISessionFactory factory 
    = config.BuildSessionFactory();
                    ISession session 
    = factory.OpenSession();

                    TestNhibernatePerson tnp 
    = new TestNhibernatePerson();
     tnp.Usertestname 
    = "test4";
      ITransaction trans 
    = session.BeginTransaction();
               
    try
               {
                 
                   
    // 保存记录
                   session.Save(tnp);
                   trans.Commit();
                   Console.WriteLine(
    "Insert Success!");

                                              
               }
               
    catch (Exception ex)
               {
                   trans.Rollback();
                   Console.WriteLine(ex.Message);
               }

               
    finally
               {
                   session.Close();
               }

    配置代码app.config如下: 

    <configuration>
      
    <!-- Add this element -->
      
    <configSections>
        
    <section name="hibernate-configuration" type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate" />
        
    <!--<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />-->
      
    </configSections>
      
    <!-- Add this element -->
      
    <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"  >

        
    <session-factory>
          
    <property name="dialect">NHibernate.Dialect.OracleDialect</property>
          
    <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
          
    <property name="connection.connection_string">user id=jkpt;data source=jkorasvr;password=designer;</property>
          
    <property name="connection.isolation" >ReadCommitted</property>
          
    <property name="show_sql">true</property>
          
    <!-- mapping files -->
          
    <mapping assembly="TestCleanSnow" />
        
    </session-factory>
      
    </hibernate-configuration>

    说明:在操作代码中加载相应引用后 config.AddAssembly("TestCleanSnow");,就不出现错误.

    如果以配置文件的形式加载引用却出现如题的错误.

    原因分析:

    解决1:

       可能是相应的映射文件没有设置成"嵌入式资源".我这里相应的映射文件为 TestNhibernatePerson.hbm.xml.

       在解决方案资源管理器中找到TestNhibernatePerson.hbm.xml该映射文件

       右击---属性----在将“生成操作”设置成“嵌入的资源”.

    解决2:

    我把 Configuration config = new Configuration();改成 Configuration config = new Configuration().Configure();

    让程序去找hibernate.cfg.xml,这个配置文件的配置跟app.config中的一样。

    解决3:
    检查映射文件映射文件 TestNhibernatePerson.hbm.xml的配置是否正确,其中

    <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="模块名称" namespace="命名空间">
      
    <class name="类名" table="数据库表名" lazy="false">
        
    <id name="Usertestid" column="USERTESTID" type="Decimal">    //主键

     <generator class="sequence">      //主键生成方式

    技术改变世界
  • 相关阅读:
    在C#中使用消息队列RabbitMQ
    从url到页面经历了什么
    jsonp跨域远离
    DNS预处理
    一个架构师需要考虑的问题
    angular2和Vue2对比
    图片多的问题
    xinwenti
    xss和csrf
    ajax是什么
  • 原文地址:https://www.cnblogs.com/davidgu/p/2178704.html
Copyright © 2011-2022 走看看