NHibernate错误集锦(个人原创,部分来自于网络)
错误信息:Illegal attempt to associate a collection with two open sessions
错误说明:添加数据时发生错误
错误原因:数据映射中一对多的字段所致,如Students
解决办法:将该字段置为null即可;Students=null;
错误信息:Could not add assembly xxxxx,如MyNHibernate.Model
错误说明:不能加载映射类程序集,此问题原因比较多,但大多数都是hibernate.cfg.xml配置文件中的问题
错误原因:1.配置文件中程序集名称是否拼写错误2.若是感觉正确,请到生成的文件目录下,再次与生成的文件名比对
解决办法:1、2.正确配置程序集名称
错误信息:cannot open connection
错误说明:数据库连接打开失败,使用MySql库可正常访问,NHibernate各项配置均正确的情况下
错误原因:1、如果用其他工具能正常访问数据库,检查下工程的.NetFramework版本是否一致 2、在.NET版本一致的情况下,检查
NHibernate.cfg.xml文件中的IP地址,127.0.0.1可用,其他异常,原因未知
NHibernate.cfg.xml文件中的IP地址,127.0.0.1可用,其他异常,原因未知
解决办法:1、将工程的.NetFramework版本设置为一致 2、将IP地址配置为127.0.0.1
错误信息:An exception occurred during configuration of persistence layer.
错误说明:new Configuration().Configure("hibernate.cfg.xml").BuildSessionFactory();
加载配置文件时出错,可能是找不到文件所致
错误原因:文件路径不对,如果你创建了文件夹,那么请把文件夹名称加上
解决办法:xxxx.Configure("Hibernate/hibernate.cfg.xml").xxxxx;
错误信息:给定关键字不在字典中。
错误说明:new Configuration().Configure("Hibernate/hibernate.cfg.xml").BuildSessionFactory();
在加载配置文件时错误,一般找不到映射文件就会报这样的错误,先检查配置文件,再检查映射文件
错误原因:1.映射文件名写错(不想多说……)2.映射文件属性不正确,虽然一再强调“复制到输出目录”选“始终
复制”,“生成操作”选“嵌入的资源”,但,还是再看看吧
解决办法:1.类名.hbn.xml2.单击映射文件(xxx.hbn.xml),在属性窗口选择
错误信息:Could not compile the mapping document: xxxx.xxxx.Mapping.xxxx.hbm.xml
错误说明:编译映射文件出错,一般情况是映射文件找不到关联的实体类
错误原因:1.类名写错了(去检查一下吧……)2.映射文件中类名标签没加命名空间3.字段名称写错了
4.可能是个BUG,Model类的命名空间要和程序集名称相同
解决办法:1. 2.name="命名空间.类, 命名空间"3.4.右键程序集属性,修改默认命名空间或程序集名称
错误信息:Invalid Cast (check your mapping for property type mismatches);
错误说明:映射文件类型错误,检查下吧
错误原因:1.与数据库对应类型错误2.外键标签类型错误
解决办法:1.这个好解决,但也要检查一下2.<bag/>对应IList<T>,<set/>对应ISet<T>
错误信息:Parameter index is out of range.
错误说明:添加数据时出现错误
错误原因:1.若是因为外键,那么是给外键赋值方式不对,应该把外键对象赋给字段
解决办法:1.Class c=new Class();c.ID=1;student.myclass=c;而不是student.ClassID=1;
错误信息:Could not create the driver from NHibernate.Driver.MySqlDataDriver.
错误说明:数据库驱动有问题,这个问题挺奇怪
错误原因:1.配置文件中连接字符串配置有问题2.MySql.Data.dll没复制到debug目录下
解决办法:1.<property name="connection.connection_string">Server=192.168.0.60;Database=test;User
ID=root;Password=mysql;CharSet=utf8</property> 2.手动复制MySql.Data.dll到debug目录下
错误信息:in expected: <end-of-text> (possibly an invalid or unmapped class name was used in the query)
错误说明:执行最大ID查询时出现错误
错误原因:错把实体类名写成表名from students
解决办法:from Student
错误信息:Incorrect query syntax
错误说明:执行最大ID查询时出现错误
错误原因:网上的查询语句不太对 "select max(ID) from Student" 有的版本就是不行
解决办法:正确写法 "select max(s.ID) from Student s"
错误信息:could not insert: [MyNHibernate.Model.Student][SQL: INSERT INTO Students (Name, ID) VALUES (?, ?)]
错误说明:删除外键配置后,添加数据出错
错误原因:删除外键配置,但没将数据库中相应的字段添加回来,添加数据就会漏项
解决办法:删除一个外键,就要增加一条普通字段
错误信息:
错误说明:
错误原因:
解决办法:
总结:
文件结构:User.cs(实体类),User.hbm.xml(映射文件),hibernate.cfg.xml(配置文件)
库引用:NHibernate.dll(关键库),MySql.Data.dll(数据库)