Solucionado (ver solução)
Solucionado
(ver solução)
20
respostas

Mapeamento NHibernate

segui exatamente conforme o video e fica dando o seguinte erro ao tentar executar... A first chance exception of type 'NHibernate.MappingException' occurred in NHibernate.dll

Additional information: Could not compile the mapping document: Loja.Mapeamentos.Usuario.hbm.xml

If there is a handler for this exception, the program may be safely continued.

o que pode ser??

20 respostas

Esqueci de colocar é referente a 1ª video Aula!

Essa exceção acontece quando o arquivo de mapeamento de uma entidade possui algum erro de configuração. Por favor poste o conteúdo do Usuario.hbm.xml para que possamos ajudá-lo

<?xml version="1.0" encoding="utf-8" ?>

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernete-mapping-2.2"
                   assembly="Loja"
                   namespace="Loja.Entidades">
<class name="Usuario">
  <id name="Id">
    <generator class="identity"/>
  </id>
  <property name="Nome"/>
</class>
</hibernate-mapping>

?

Oi Alex

O seu mapeamento parece correto, você poderia postar a stack trace que foi exibida pelo console quando você executou a aplicação?

Victor, o erro nao foi pra console só foi exibido na menssagembox com a messagem, que passei no primeiro post...

e agora?

Loja.exe!Loja.Infra.NHibernateHelper.RecuperaConfiguracao() Line 18 C# Loja.exe!Loja.Infra.NHibernateHelper.GeraSchema() Line 24 C# Loja.exe!Loja.Program.Main(string[] args) Line 14 C#

seria isso?

Alguem poderia me ajudar? continuo com o mesmo problema ja recriei a aplicação da video aula 4 vezes e o erro persiste...

Oi Alex

Acabei de achar o erro no seu xml. Na segunda linha do arquivo você escreveu:

<hibernate-mapping xmlns="urn:nhibernete-mapping-2.2"
                   assembly="Loja"
                   namespace="Loja.Entidades">

Mas o nome correto no xmlns é ´urn:nhibernate-mapping-2.2´ e não ´urn:nhibernete-mapping-2.2´.

O mapeamento correto fica da seguinte forma:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                   assembly="Loja"
                   namespace="Loja.Entidades">
<class name="Usuario">
  <id name="Id">
    <generator class="identity"/>
  </id>
  <property name="Nome"/>
</class>
</hibernate-mapping>

Boa Tarde Victor, Troquei o meu codigo pelo o corrigido e ainda ocorre o erro:

An unhandled exception of type 'NHibernate.MappingException' occurred in NHibernate.dll

Additional information: Could not compile the mapping document: Loja.Mapeamentos.Usuario.hbm.xml

If there is a handler for this exception, the program may be safely continued.

Oi Alex

Rode o seu código com o Ctrl+F5 no Visual Studio e cole toda a mensagem de erro que aparecer no terminal.

Só com o trecho que você postou é impossível de saber o que deu errado.

Bom dia Victor, segue abaixo, apareceu na tela do CMD:

Exceção Sem Tratamento: NHibernate.MappingException: Could not compile the mappi ng document: Loja.Mapeamentos.Usuario.hbm.xml ---> NHibernate.HibernateException : Could not instantiate dialect class NHibernate.Dialect.MySql5Dialect ---> Syst em.TypeLoadException: Could not load type NHibernate.Dialect.MySql5Dialect. Poss ible cause: no assembly name specified. em NHibernate.Util.ReflectHelper.TypeFromAssembly(AssemblyQualifiedTypeName n ame, Boolean throwOnError)

em NHibernate.Dialect.Dialect.InstantiateDialect(String dialectName)

Fim do rastreamento de pilha de exceções internas --- em NHibernate.Dialect.Dialect.InstantiateDialect(String dialectName) em NHibernate.Dialect.Dialect.GetDialect(IDictionary`2 props) em NHibernate.Cfg.Configuration.AddDeserializedMapping(HbmMapping mappingDocu

ment, String documentFileName)

Fim do rastreamento de pilha de exceções internas --- em NHibernate.Cfg.Configuration.LogAndThrow(Exception exception) em NHibernate.Cfg.Configuration.AddDeserializedMapping(HbmMapping mappingDocu ment, String documentFileName) em NHibernate.Cfg.Configuration.ProcessMappingsQueue() em NHibernate.Cfg.Configuration.AddInputStream(Stream xmlInputStream, String name) em NHibernate.Cfg.Configuration.AddResource(String path, Assembly assembly) em NHibernate.Cfg.Configuration.AddAssembly(Assembly assembly) em Loja.Infra.NHibernateHelper.RecuperaConfiguracao() na c:\Users\akatz\Docum ents\Visual Studio 2013\Projects\Loja\Loja\Infra\NHibernateHelper.cs:linha 18 em Loja.Infra.NHibernateHelper.GeraSchema() na c:\Users\akatz\Documents\Visua l Studio 2013\Projects\Loja\Loja\Infra\NHibernateHelper.cs:linha 24 em Loja.Program.Main(String[] args) na c:\Users\akatz\Documents\Visual Studio 2013\Projects\Loja\Loja\Program.cs:linha 14 Pressione qualquer tecla para continuar. . .

Oi Alex

Exceção Sem Tratamento: NHibernate.MappingException: Could not compile the mappi ng document: Loja.Mapeamentos.Usuario.hbm.xml ---> NHibernate.HibernateException : Could not instantiate dialect class NHibernate.Dialect.MySql5Dialect

Por essa linha da stacktrace, podemos ver que o problema é que o NHibernate não encontrou o dialeto que você está tentando usar na aplicação (NHibernate.Dialect.MySql5Dialect). O dialeto não foi encontrado por que o nome correto da classe é NHibernate.Dialect.MySQL5Dialect (Essa configuração está no arquivo hibernate.cfg.xml).

Tente fazer essa modificação e se o NHibernate lançar uma nova exceção, poste também o conteúdo do arquivo hibernate.cfg.xml da aplicação.

Victor, obrigado pelo retorno, mas ainda continua dando o mesmo erro, segue abaixo o codigo:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
  <session-factory>
    <property name="connection.provider">
      NHibernate.Connection.DriverConnectionProvider
    </property>
    <property name="connection.driver_class">
      NHibernate.Driver.MySqlDataDriver
    </property>
    <property name="dialect">
      NHibernate.Dialect.MySQL5Dialect
    </property>
    <property name="connection.connection_string">
      Server=127.0.0.1; Port=3306; Database=loja;Uid=root;Pwd=sasa;
    </property>
  <property name="show_sql">true</property>
  </session-factory>
</hibernate-configuration>

Oi Alex

Eu testei a sua configuração em um projeto novo e ela já está funcionando aqui. Rode novamente a aplicação com o Ctrl + f5 e poste novamente a saída do terminal

oi victor, segue abaixo:

Exceção Sem Tratamento: NHibernate.MappingException: Could not compile the mappi ng document: Loja.Mapeamentos.Usuario.hbm.xml ---> NHibernate.MappingException: persistent class Loja.Entidades.Usuario, Loja not found ---> System.TypeLoadExce ption: Não foi possível carregar o tipo Loja.Entidades.Usuario do assembly Loja, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null. em System.Reflection.RuntimeAssembly.GetType(RuntimeAssembly assembly, String name, Boolean throwOnError, Boolean ignoreCase, ObjectHandleOnStack type) em System.Reflection.RuntimeAssembly.GetType(String name, Boolean throwOnErro r, Boolean ignoreCase) em System.Reflection.Assembly.GetType(String name, Boolean throwOnError) em NHibernate.Util.ReflectHelper.TypeFromAssembly(AssemblyQualifiedTypeName n ame, Boolean throwOnError) em NHibernate.Cfg.XmlHbmBinding.Binder.ClassForFullNameChecked(String fullNam

e, String errorMessage)

Fim do rastreamento de pilha de exceções internas --- em NHibernate.Cfg.XmlHbmBinding.Binder.ClassForFullNameChecked(String fullNam e, String errorMessage) em NHibernate.Cfg.XmlHbmBinding.ClassBinder.BindClass(IEntityMapping classMap ping, PersistentClass model, IDictionary2 inheritedMetas) em NHibernate.Cfg.XmlHbmBinding.RootClassBinder.Bind(HbmClass classSchema, ID ictionary2 inheritedMetas) em NHibernate.Cfg.XmlHbmBinding.MappingRootBinder.AddEntitiesMappings(HbmMapp ing mappingSchema, IDictionary`2 inheritedMetas) em NHibernate.Cfg.XmlHbmBinding.MappingRootBinder.Bind(HbmMapping mappingSche ma) em NHibernate.Cfg.Configuration.AddDeserializedMapping(HbmMapping mappingDocu

ment, String documentFileName)

Fim do rastreamento de pilha de exceções internas --- em NHibernate.Cfg.Configuration.LogAndThrow(Exception exception) em NHibernate.Cfg.Configuration.AddDeserializedMapping(HbmMapping mappingDocu ment, String documentFileName) em NHibernate.Cfg.Configuration.ProcessMappingsQueue() em NHibernate.Cfg.Configuration.AddInputStream(Stream xmlInputStream, String name) em NHibernate.Cfg.Configuration.AddResource(String path, Assembly assembly) em NHibernate.Cfg.Configuration.AddAssembly(Assembly assembly) em Loja.Infra.NHibernateHelper.RecuperaConfiguracao() na c:\Users\akatz\Docum ents\Visual Studio 2013\Projects\Loja\Loja\Infra\NHibernateHelper.cs:linha 18 em Loja.Infra.NHibernateHelper.GeraSchema() na c:\Users\akatz\Documents\Visua l Studio 2013\Projects\Loja\Loja\Infra\NHibernateHelper.cs:linha 24 em Loja.Program.Main(String[] args) na c:\Users\akatz\Documents\Visual Studio 2013\Projects\Loja\Loja\Program.cs:linha 14 Pressione qualquer tecla para continuar. . .

Oi Alex

Segundo esse trecho da mensagem:

Não foi possível carregar o tipo Loja.Entidades.Usuario do assembly Loja

O NHibernate não está conseguindo localizar a sua classe Usuario.

Confira se o namespace da classe é realmente Loja.Entidades e que o nome da classe é exatamente Usuario. Seu código deve ser parecido com o abaixo:

namespace Loja.Entidades
{
    public class Usuario
    {
        // propriedades da classe
    }
}

Se você não conseguir resolver o problema poste o código completo da sua classe Usuario, incluindo as linhas de using e namespace

Oi Alex

O seu problema foi resolvido?

solução!

ainda nao mas vou refazer os dois curso semana que vem do Nhibernet e entity framework se tiver com o mesmo problema eu abro de novo a disução

obrigado Victor