NHibernate 配置问题

Posted

技术标签:

【中文标题】NHibernate 配置问题【英文标题】:NHibernate config problem 【发布时间】:2009-08-08 23:30:30 【问题描述】:

我觉得发布这个很愚蠢,但我看不出这里有什么问题。我想看看热门的 Nhibernate 作品,而不是进入网站,下载它,并按照快速入门教程进行操作,但做了一些机会——我使用的是 mysql,它不是产品,而是我项目中的用户,但无论如何。 ..

当我运行模式生成测试时出现错误,这是错误信息:

TestCase 'Uniflu.Domain.Tests.GenerateSchema_Fixture.Can_generate_schema'
失败:NHibernate.MappingException:无法编译映射文档:
Uniflu.Domain.Mappings.Usuario.hbm.xml
----> NHibernate.HibernateException : 无法实例化方言类
NHibernate.Dialect.MySqlDialect
----> System.TypeLoadException:无法加载类型 NHibernate.Dialect.MySqlDialect。
可能的原因:未指定程序集名称。
em NHibernate.Cfg.Configuration.LogAndThrow(异常异常)
em NHibernate.Cfg.Configuration.AddValidatedDocument(NamedXmlDocument doc)
em NHibernate.Cfg.Configuration.ProcessMappingsQueue()
em NHibernate.Cfg.Configuration.AddInputStream(流 xmlInputStream,字符串名称)
em NHibernate.Cfg.Configuration.AddResource(字符串路径,程序集程序集)
em NHibernate.Cfg.Configuration.AddAssembly(程序集程序集)
E:\Projetos\Uniflu\Uniflu\Uniflu.Domain\Tests\GenerateSchema_Fixture.cs(17,0): em Uniflu.Domain.Tests.GenerateSchema_Fixture.Can_generate_schema()
--休眠异常
em NHibernate.Dialect.Dialect.InstantiateDialect(String dialectName)
em NHibernate.Dialect.Dialect.GetDialect(IDictionary`2 props)
em NHibernate.Cfg.Configuration.AddValidatedDocument(NamedXmlDocument doc)
--TypeLoadException
em NHibernate.Util.ReflectHelper.TypeFromAssembly(AssemblyQualifiedTypeName 名称,布尔 throwOnError)
em NHibernate.Util.ReflectHelper.ClassForName(字符串名称)
em NHibernate.Dialect.Dialect.InstantiateDialect(String dialectName)

0 次通过,1 次失败,0 次跳过,耗时 5.37 秒(NUnit 2.5)。 

我的hibernate.cfg.xml:

<?xml version="1.0" encoding="utf-8" ?>  
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">  
<session-factory name="Test">  
<property name="connection.driver_class">NHibernate.Driver.MySqlDataDriver</property>  
<property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>  
<property name="dialect">NHibernate.Dialect.MySqlDialect</property>  
<property name="connection.connection_string">Server=Athenas;Database=uniflu;Uid=alaor;Pwd=test;</property>  
<property name="show_sql">true</property>  
</session-factory>  
</hibernate-configuration>  

我的用户类:

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  

namespace Uniflu.Domain  
  
    public class Usuario  
      
        public virtual Guid Id  get; set;   
        public virtual String Nome  get; set;   
        public virtual String Email  get; set;   
        public virtual String Senha  get; set;   
        public virtual String Dica  get; set;   
        public virtual DateTime DataCriado  get; set;   
        public virtual DateTime UltimoAcesso  get; set;   
        public virtual Boolean Ativo  get; set;   
      
  

我的 Usuario.hbm.xml:

<?xml version="1.0" encoding="utf-8" ?>  
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"  
               assembly="Uniflu.Domain"  
               namespace="Uniflu.Domain">  
<class name="Usuario">  
<id name="Id">  
<generator class="guid" />  
</id>  
<property name="Nome" />  
<property name="Email" />  
<property name="Senha" />  
<property name="Dica" />  
<property name="DataCriado" />  
<property name="UltimoAcesso" />  
<property name="Ativo" />  
</class>  
</hibernate-mapping>  

我的解决方案名称是Uniflu,我的项目是Uniflu.Domain,是一个类库项目,目录结构是这样的:

Uniflu -> Uniflu.Domain -> -> 属性 -> -> 参考文献 -> -> 映射 -> -> -> Usuario.hbm.xml -> -> 测试 -> -> -> 生成Schema_Fixture -> -> hibernate.hbm.xml -> -> Usuario.cs

Guyz 我看不出我做错了什么......我真的需要一些光!请!!

提前致谢。

【问题讨论】:

【参考方案1】:

您在hibernate.cfg.xml 中拼错了MySQLDialect(注意大小写)。

始终注意异常消息和堆栈跟踪。

【讨论】:

还是不行啊,不是这样的。 =/但感谢z的回复。 哦,抱歉,现在可以了!更改后我不得不再次构建项目!非常感谢!你是男人! ;P【参考方案2】:

确保您的映射文件具有 *.hbm.xml 扩展名(看起来确实如此),并且每个映射文件的构建类型设置为“嵌入式资源”

【讨论】:

老兄,谢谢你的回复,但它已经被设置为“嵌入式资源”,当时的 Usuario.hbm.xml 和 hibernate.cfg.xml。

以上是关于NHibernate 配置问题的主要内容,如果未能解决你的问题,请参考以下文章

ORM篇——使用NHibernate配置对象实体的一些小问题

NHibernate.Spatial 和 Sql 2008 地理类型 - 如何配置

单向一对多关系的流畅 NHibernate 配置 - 删除问题

如何使用 MySQL 配置流畅的 nHibernate

Fluent 映射和 NHibernate Xml 配置

如何使用 Fluent 设置 NHibernate.Burrow?