Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Exceção NHibernate.Mapping. Sem persistente para Namespace.className


Eu diria, porque toda essa informação, deveríamos ter um culpado. Há tantos problemas (bem problemas na verdade) com o mapeamento e código C# , que com certeza sabemos:

Caso este arquivo como está estaria disponível para a fábrica de sessões do NHibernate, obteríamos esta exceção

O que pode ser corrigido adicionando o atributo namespace ao mapeamento namespace="NhibernateORM"
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" 
  assembly="NhibernateORM"
  namespace="NhibernateORM"
  auto-import="true">
  <class name="Layout" table="mytable">
    <id name="Id" column="ID" type="int" generator="assigned" />
    <property name="Name"        column="name"        type="String"/>
    <property name="xCoordinate" column="xCoordinate" type="double" />
    <property name="yCoordinate" column="yCoordinate" type="double" />
  </class>
</hibernate-mapping>

Uma vez que isso fosse corrigido, mais tarde receberíamos essa exceção

o que poderia ser corrigido tornando todo o material da Entidade virtual:
namespace NhibernateORM
{
    public class Layout
    {
        public virtual int Id { get; set; }
        public virtual string Name { get; set; }
        public virtual double xCoordinate { get; set; }
        public virtual double yCoordinate { get; set; }

Então, com certeza, nós sabemos - a questão é
  • configuração incorreta no hibernate.cfg.xml
  • configuração incorreta do Mapping.hbm.xml propriedades

Isso deve fazer parte do hibernate.cfg.xml :
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
  <session-factory>
      ...
      <mapping assembly="NhibernateORM"/>

o hibernate.cfg.xml deve ter propriedades:
  • Criar ação ===conteúdo
  • Copiar para o diretório de saída ===Copiar sempre

o Mapping.hbm.xml deve ter propriedades:
  • Criar ação ===Recurso incorporado
  • Copiar para o diretório de saída ===Não copiar