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文件设置为嵌入资源。只要把映射文件设置为嵌入资源就可以解决这个问题了。

时间: 2024-11-08 18:56:39

NHibernate+MySql常见问题的相关文章

NHibernate的常见问题及解决方案

问题1 : 异常:in expected: <end-of-text> (possibly an invalid or unmapped class name was used in the query) [from Customer] 解决方案:查看HQL语句查询的是否是实体类,映射文件属性是否正确:复制到输出目录à始终复制 ..生成操作à嵌入的资源. 问题2: 异常:缺少必需的属性“name”. 解决方案:查看映射文件里,是否哪个<property>节点缺少name属性 问题3

mysql常见问题集锦

首先你应该试着找出问题mysqld守护进程是否死掉或你的问题是否与你的客户有关.你可以用mysqladmin version检查你的mysqld服务器正常执行了多长时间,如果mysqld死了,你可以在文件“mysql-data- directory/’hostname’.err”中找到其原因. 使用MySQL时的一些常见错误 MySQL server has gone away 常见的原因是服务器超时了并且关闭了连接.缺省地,如果没有事情发生,服务器在 8个小时后关闭连接.你可在启动mysqld

MySQL常见问题概览

最近看了江承尧老师的<MySQL技术内幕:sql编程>,同时结合自己工作中遇到的一些问题,从工程性能以及MySQL本身实际应用出发,总结了一些通过子查询解决的常见问题 1  行号 MySQL数据库在行号方面的支持并不是十分友好,没有像其他数据库一样提供类似row_number解决方案 demo1:select  empid ,(select count(1) from sales AS t2 where  t2.empid<=t1.empid) as rownum from salas

mysql常见问题

一,指定需要mysql.sock文件 [[email protected] mysql-5.5.24]# mysql -uroot -pEnter password: ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) 解决方法: mysql -uroot -p -S /var/lib/mysql/mysql.sock 或者 ln -s /var/lib/mysq

MySQL常见问题和命令

问题: 1.centos MySQL启动失败:关闭selinux, vi /etc/selinux/config, 设置SELINUX=disabled,重启电脑: 命令: 停止.启动mysql服务器:/etc/init.d/mysqld {start|stop|status|restart|condrestart|try-restart|reload|force-reload} DDL(Data Definition Languages) 一.数据库相关 创建数据库:            

Nhibernate + MySQL 类型映射

用SQLyog工具创建表 然后用自动映射工具NHibernate Mapping Generator对表做自动映射,得到 这个是可视化界面,后面有对应的代码. using System; using System.Collections.Generic; using System.Text; using FluentNHibernate.Mapping; using Sample.CustomerService.Domain; namespace Sample.CustomerService.M

20160924-2——mysql常见问题集锦

一.数据类型相关问题 1.varchar(N)占用多少空间 (1)varchar(N)里的N是字符数,而不是字节数: (2)字符类型(varchar text blob等)空间=字符实际长度+字段长度: (3)varchar(N)占用的空间: 如果是lantin1字符集时,最大空间=1N+(1 or 2)bytes,因为lantin1的1个字符占用1个字节,后面加的1或2bytes是用来表示字段长度的,当可能超过255个字节时,要2个bytes来表示字段长度: 如果是utf8字符集时,最大空间=

【面试】【MySQL常见问题总结】【04】

[常见面试问题总结目录>>>] 091 数据库死锁概念 多数情况下,可以认为如果一个资源被锁定,它总会在以后某个时间被释放.而死锁发生在当多个进程访问同一数据库时,其中每个进程拥有的锁都是其他进程所需的,由此造成每个进程都无法继续下去.简单的说,进程A等待进程B释放他的资源,B又等待A释放他的资源,这样就互相等待就形成死锁. 虽然进程在运行过程中,可能发生死锁,但死锁的发生也必须具备一定的条件,死锁的发生必须具备以下四个必要条件. 1)互斥条件:指进程对所分配到的资源进行排它性使用,即在

【面试】【MySQL常见问题总结】【03】

[常见面试问题总结目录>>>] 061 如何删除表? 答案:运行命令 drop table table_name; 062 创建索引 对于查询占主要的应用来说,索引显得尤为重要.很多时候性能问题很简单的就是因为我们忘了添加索引而造成的,或者说没有添加更为有效的索引导致.如果不加索引的话,那么查找任何哪怕只是一条特定的数据都会进行一次全表扫描,如果一张表的数据量很大而符合条件的结果又很少,那么不加索引会引起致命的性能下降.但是也不是什么情 况都非得建索引不可,比如性别可能就只有两个值,建索