1
resposta

NHibernate.MappingException

Olá! Tudo bem a todos?

Comecei a fazer os exercícios com algumas mudanças nos nomes, mas que não deveriam influenciar no resultado do mesmo.

Quando compilo aparecem para mim duas Exceptions:

NHibernate.MappingException: 'Could not compile the mapping document: NHibernate.Mapeamento.Usuario.hbm.xml'

  • MappingException: persistent class NHibernate.Entidades.Usuario, NHibernate not found

  • TypeLoadException: Não foi possível carregar o tipo NHibernate.Entidades.Usuario do assembly NHibernate, Version=4.1.0.4000, Culture=neutral, PublicKeyToken=aa95f207798dfdb4.

Segue o código abaixo:

Usuario.cs

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

namespace NHibernate.Entidades
{
    public class Usuario
    {
        public virtual int Id { get; set; }
        public virtual string Nome { get; set; }
    }
}

Usuario.hbm.xml c/ a mudança no build action "Recurso Inserido"

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

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                   assembly="NHibernate"
                   namespace="NHibernate.Entidades">

  <class name="Usuario">
    <id name="Id">
        <generator class="identity" />
    </id>
    <property name="Nome" />
</class>

</hibernate-mapping>

hibernate.cfg.xml c/ a mudança no build action "Copiar sempre"

<?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="dialect">NHibernate.Dialect.MsSql2012Dialect</property>
    <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
    <property name="connection.connection_string">
      Data Source=.\SQLEXPRESS;Initial Catalog=NHibernateDB;Integrated Security=True;
    </property>
    <property name="show_sql">true</property>
  </session-factory>
</hibernate-configuration>
1 resposta

Olá, Claudio!

Infelizmente não temos muitas informações na exceção que você postou, mas eu acho que o problema está nestas linhas do Usuario.hbm.xml:

                   assembly="NHibernate"
                   namespace="NHibernate.Entidades">

O assembly do seu projeto é mesmo NHibernate? Isso pode estar fazendo o NHibernate carregar o NHibernate.dll, e não o assembly do seu projeto. Renomeie o projeto, mude o nome do assembly gerado (em Propriedades do Projeto) e também renomeie o namespace NHibernate.Entidades para [NovoNome].Entidades.