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

o documento de mapeamento nao compila

Olá amigos, estou com problemas neste capítulo e vou descrever aos poucos passo a passo cada problema para que não fique algo cansativo de se ler pra vocês.

Essa é a mensagem de erro:

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

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

Este é o código do documento de mapeamento


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

Este é o hibernate.cfg.xml


<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
  <session-factory>
    <property name="connection.driver_class">NHibernate.Driver.MySqlDataDriver</property>
    <property name="connection.provider">NHibernate.connection.DataConnectionProvider</property>
    <property name="dialect">NHibernate.dialect.MySQL5Dialect</property>
    <property name="connection.connection_string">
      Server=localhost;Database=loja;Uid=root;Pwd=root;
    </property>
    <property name="show_sql">True</property>
  </session-factory>
</hibernate-configuration>

E se vale ressaltar algo que notei durante os estudos, é que mesmo fazendo exatamente o mesmo código da vídeo aula eu não consegui acessar as classes "Assembly" e "SchemaExport" tendo então que utilizar

using System.Reflection;
using NHibernate.Tool.hbm2ddl;

na minha NHibernateHelper

using NHibernate.Cfg;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Reflection;
using NHibernate.Tool.hbm2ddl;

namespace Loja.Infra
{
    class NHibernateHelper
    {
        public static Configuration RecuperaConfiguracao()
        {
            Configuration cfg = new Configuration();
            cfg.Configure();
            cfg.AddAssembly(Assembly.GetExecutingAssembly());

            return cfg;
        }

        public static void GeraSchema()
        {
            Configuration cfg = RecuperaConfiguracao();
            new SchemaExport(cfg).Create(true,true);
        }
    }
}
10 respostas

Você mudou a propriedade da ação da classe de mapeamento para " recurso incorporado" ?

sim, mudei o build action para Embedded Resource e ainda nao compila o documento de mapeamento. Apesar da mensagem informar que a o documento de mapeamento nao pode ser compilada, o erro me leva para essa linha e a deixa selecionada.

cfg.AddAssembly(Assembly.GetExecutingAssembly());

ela faz parte do NHibernateHelper

Oi Claudio

Você poderia postar o código completo da sua classe Produto? Incluindo os usings e a declaração do namespace?

Poste também toda a stack trace do erro, não apenas a mensagem de erro.

Produto.cs

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

namespace Loja.Entidades
{
    public class Produto
    {
        public virtual int Id { get; set; }
        public virtual string Nome { get; set; }
        public virtual double Preco { get; set; }
    }
}

call stack

     [External Code]    
     Loja.exe!Loja.Infra.NHibernateHelper.RecuperaConfiguracao() Line 18 + 0x1c bytes    C#
    Loja.exe!Loja.Infra.NHibernateHelper.GeraSchema() Line 25 + 0x5 bytes    C#
     Loja.exe!Loja.Program.Main(string[] args) Line 14 + 0x5 bytes    C#
     [External Code]

nao sei se este call stack é o stack trace que vc quer ver, caso nao seja me ensine a conseguir esta informacao.

OI Claudio

Quando você roda o programa, o terminal do sistema deve abrir certo? Eu preciso que você poste tudo que aparece no terminal, senão eu não tenho informações suficientes para resolver seu problema.

Também estou com problema, observei que no curso a versão do NHIbernete versão 3... e agora está na 4 ... isso deve estar conflitando.

Exatamente Rogério, as versões diferentes devem estar conflitando. Victor, o terminal abre zerado, sem nenhuma linha. Apenas a janela preta. =\

Seria interessante atualizar o video com a versão mais ressente, já que o mesmo sofreu mudanças.

solução!

Funcionou, no meu caso as classes Usuario e Projeto não estava como public, e repassando a olho fino tinha erro de sintaxe nos xmls, e funcionou na versão atual. O curso está correto, o erro é era meu mesmo, repasse o vídeo comparando o que foi feito, algum detalhe pequeno ficou para trás.

Boa noite, Também estou enfrentando o mesmo problema do claudiosimoesjunior

Segue abaixo os códigos:

hibernate.dfg.xml

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
  <session-factory>
    <property name="connection.driver_class">NHibernate.Driver.MySqlDataDriver</property>
    <property name="connection.provider">NHibernate.Connetion.DiverConnectionProvider</property>
    <property name="dialect">NHibernate.Dialect.MSQL5Dialect</property>
    <property name="connection.connection_string">
      Server=Localhost;Database=loja;Uid=root;Pwd=478512;
    </property>
    <property name="show_sql">true</property>
  </session-factory>
</hibernate-configuration>

Usuario.hbm.xml

<?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>

Produto.hbm.xml

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

Classe Usuario

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

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

Classe Produto

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

namespace Loja.Entidades
{
    public class Produto
    {
        public virtual int Id { get; set; }
        public virtual string Nome { get; set; }
        public virtual double Preco { get; set; }

    }
}

Classe NHibernateHelper

using NHibernate.Cfg;
using NHibernate.Tool.hbm2ddl;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;

namespace Loja.Infraestrutura
{
    public class NHibernateHelper
    {
        public static Configuration RecuperaConfiguracao()
        {
            Configuration cfg = new Configuration();
            cfg.Configure();
            cfg.AddAssembly(Assembly.GetExecutingAssembly());           

            return cfg;
        }

        public static void GeraSchema()
        {
            Configuration cfg = RecuperaConfiguracao();
            new SchemaExport(cfg).Create(true, true);
        }
    }
}

Exception

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

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

Call Stack

>    Loja.exe!Loja.Infraestrutura.NHibernateHelper.RecuperaConfiguracao() Line 18    C#
     Loja.exe!Loja.Infraestrutura.NHibernateHelper.GeraSchema() Line 25    C#
     Loja.exe!Loja.Program.Main(string[] args) Line 14    C#
     [External Code]

A tela do terminal abre, porém com a tela preta sem nada nela.