Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

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