7
respostas

Dúvida no Ex. 8 da Aula 1 - Configurando e Entendendo o NHibernate

Boa noite,

Não consigo compilar o código passado no vídeo para completar a aula 1, segue o erro:

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]

Segue os códigos do projeto:

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);
        }
    }
}

Apenas aparece o terminal sem nada escrito, os arquivos hbm.xml de mapeamento estão configurados como Embedded Resource.

7 respostas

estou com este mesmo problema, ao rodar ele apresenta um erro no método RecuperaConfiguracao():

cfg.AddAssembly(Assembly.GetExecutingAssembly());

alguém??

O problema vai ficar sem resolução???

também estou com o mesmo problema

Esse código que você postou está com erros:

Primeiro, o arquivo hibernate.dfg.xml, não é "dfg" e sim "cfg".

Segundo, pelo que vi no seu arquivo de configuração do Hibernate a linha está incorreta faltou o "r": <property name="connection.provider">NHibernate.Connetion.DriverConnectionProvider</property>

E o "c" no Connection

<property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>

Configurou o Directory do arquivo "hibernate.cfg.xml" como "Copy Always"? Neste o "Build Action" permanece como "Content".