首页 > 代码库 > NHibernate+MySql常见问题

NHibernate+MySql常见问题

版本:

    NHibernate :NHibernate 4.0.1GA

    MySql:MySql 5.0.1


常见问题一:

    “NHibernate.HibernateException”类型的未经处理的异常在 NHibernate.dll 中发生 

其他信息: Could not create the driver from NHibernate.Driver.MySqlDataDriver.


解决方案:

    把MySql.Data.dll程序集引入到项目中,这个问题就解决了。原因在于找不到驱动。



常见问题二:


    异常:已引发: "Duplicate class/entity mapping MySqlLib.TyAsset" (NHibernate.DuplicateMappingException)

引发了一个 NHibernate.DuplicateMappingException: "Duplicate class/entity mapping MySqlLib.TyAsset"


解决方案:

  

    这个问题是因为在如下的代码的问题:

    

<?xml version="1.0" encoding="utf-8"?>
<hibernate-configuration  xmlns="urn:nhibernate-configuration-2.2" >
<session-factory name="_sessionFactory">
<property name="connection.driver_class">NHibernate.Driver.MySqlDataDriver</property>
<property name="connection.connection_string">
      User Id=root;Password=123456;Host=127.0.0.1;Port=3306;Database=test;Persist Security Info=True
      <!--User Id=itywuser;Password=qwe#123;Host=192.168.72.201;Port=3316;Database=tysx;Persist Security Info=True-->
    </property>
<property name="dialect">NHibernate.Dialect.MySQLDialect</property>
    <property name="show_sql">true</property>
    <property name="hbm2ddl.keywords">none</property>
    <property name="hbm2ddl.auto">create</property>
    <mapping assembly="MySqlLib"/>
</session-factory>
</hibernate-configuration>


  因为hibernate.cfg.xml文件中已经添加了<mapping assembly="xxxx"/>,如果你在加载这个文件时添加了如下代码就会出现这个问题:

    ISessionFactory factory = (new Configuration().Configure("D:\\实习文档\\ASP数据库\\TestMySqlLib\\Test\\MySql.cfg.xml")).AddAssembly("TestMySqlLib").BuildSessionFactory();

重复的加载了程序集。




常见问题三:

    

    异常:已引发: "Could not compile the mapping document: MySqlLib.TyAsset.hbm.xml" (NHibernate.MappingException)

引发了一个 NHibernate.MappingException: "Could not compile the mapping document: MySqlLib.TyAsset.hbm.xml"

线程: <无名称>[11980]

    

解决方案:


    这个问题出在hbm.xml文件是毋庸置疑的,代码如下:

<hibernate-mapping assembly="TestMySqlLib" xmlns="urn:nhibernate-mapping-2.2" default-lazy="false">
  <class name="Student" table="student" lazy="false">
<!--正确的做法-->
<hibernate-mapping assembly="TestMySqlLib" xmlns="urn:nhibernate-mapping-2.2" default-lazy="false">
  <class name="TestMySqlLib.Student,TestMySqlLib" table="student" lazy="false">

   

    这个官方文档中有详细的说明,网络上也有很多文章说这个问题,我就不再这里赘述这个原因了。




常见问题四:


    “System.ArgumentException”类型的未经处理的异常在 System.Data.dll 中发生 

其他信息: 列“ReservedWord”不属于表 ReservedWords。


解决方案:

    在hibernate.cfg.xml文件中添加数据源的一条属性设置:如下

        <property name="hbm2ddl.keywords">none</property>

  原因请参看hbm2ddl.keywords的详解,文章链接:http://www.cnblogs.com/Byrd/archive/2012/01/09/2317230.html




常见问题五:


    “NHibernate.Cfg.HibernateConfigException”类型的未经处理的异常在 NHibernate.dll 中发生 其他信息: An exception occurred during configuration of persistence layer.


解决方案:

    这个问题主要出在一下代码中:

        ISessionFactory factory = (new Configuration().Configure()).AddAssembly("TestMySqlLib").BuildSessionFactory();

    第一:保证你的配置文件名为:hibernate.cfg.xml

    第二:设置文件hibernate.cfg.xml文件的输出属性,为始终复制。因为采用上面方式加载配置文件,会到debug目录下去找名字为hibernate.cfg.xml的文件。关于配置文件加载方式可在我的博客中找相关文章。




常见问题六:

    

    “NHibernate.MappingException”类型的未经处理的异常在 NHibernate.dll 中发生 

其他信息: Could not add assembly testMySqlLib


解决方案:

    这个问题刚好和第二问题刚好相反,没有添加程序集,有两个方法可以解决这个问题

    第一:

        在hibernate.cfg.xml文档中添加<mapping assembly="xxxx"/>

    第二:

        在加载hibernate.cfg.xml文件时用如下代码:

    ISessionFactory factory = (new Configuration().Configure("D:\\实习文档\\ASP数据库\\TestMySqlLib\\Test\\MySql.cfg.xml")).AddAssembly("xxxx").BuildSessionFactory();



常见问题七:


    异常:已捕获: "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘ Sex varchar, Age int, Addr varchar, Phone varchar, primary key (Stuno))‘ at line 1" (MySql.Data.MySqlClient.MySqlException)

线程: <无名称>[2884]


解决方案:

    

        该问题尚未查找到解决方案,如果您和我一样碰到这个问题并且已经解决了或者你有自己的看法,请在下面留言告诉我还有更多的网友,我们一起解决这个问题。谢谢。



常见问题八:

    

异常:已引发: "未能加载文件或程序集“NHibernate.XmlSerializers, Version=3.0.0.4000, Culture=neutral, PublicKeyToken=aa95f207798dfdb4”或它的某一个依赖项。系统找不到指定的文件。" (System.IO.FileNotFoundException)引发了一个 System.IO.FileNotFoundException: "未能加载文件或程序集“NHibernate.XmlSerializers, Version=3.0.0.4000, Culture=neutral, PublicKeyToken=aa95f207798dfdb4”或它的某一个依赖项。系统找不到指定的文件。"

线程: <无名称>[8276]


解决方案:

    

    该问题尚未查找到解决方案,如果您和我一样碰到这个问题并且已经解决了或者你有自己的看法,请在下面留言告诉我还有更多的网友,我们一起解决这个问题。谢谢。


常见问题九:

异常:已引发: "No persister for: StudentLib.Student" (NHibernate.MappingException)

引发了一个 NHibernate.MappingException: "No persister for: StudentLib.Student"

线程: <无名称>[18324]



解决方案:

    一般这种是因为没有把student.hbm.xml文件设置为嵌入资源。只要把映射文件设置为嵌入资源就可以解决这个问题了。


本文出自 “爱咖啡” 博客,请务必保留此出处http://4837471.blog.51cto.com/4827471/1567675

NHibernate+MySql常见问题