NHibernate join-subclass error - 对象与目标类型不匹配

Ala*_*aor 1 c# nhibernate

当我尝试使用带有NHibernate的join-subclass将对象添加到数据库时,我收到错误.这是我的代码:

Pessoa.cs

namespace CarvalhoRodrigues.Domain.Cadastro
{
    public class Pessoa
    {
        public Pessoa()
        {
            this.Endereco = new List<Endereco>();
        }

        public virtual long Id { get; set; }
        public enum TipoPessoa { Fisica, Juridica }
        public virtual TipoPessoa Tipo { get; set; }
        public virtual ICollection<Endereco> Endereco { get; set; }

    }
}
Run Code Online (Sandbox Code Playgroud)

PessoaFisica.cs

namespace CarvalhoRodrigues.Domain.Cadastro
{
    public class PessoaFisica : Pessoa
    {
        public virtual string CPF { get; set; }
        public virtual string Nome { get; set; }
        public virtual DateTime DataNascimento { get; set; }
    }
}
Run Code Online (Sandbox Code Playgroud)

PessoaJuridica.cs

namespace CarvalhoRodrigues.Domain.Cadastro
{
    public class PessoaJuridica
    {
        public virtual string CNPJ { get; set; }
        public virtual string RazaoSocial { get; set; }
        public virtual DateTime DataConstituicao { get; set; }
        public virtual string NomeFantasia { get; set; }
        public virtual ICollection<Pessoa> Representantes { get; set; }
    }
}
Run Code Online (Sandbox Code Playgroud)

PessoaRepository.cs

namespace CarvalhoRodrigues.Domain.Repositories.Cadastro
{
    class PessoaRepository : IPessoaRepository
    {
        public void Inserir(Pessoa Pessoa)
        {
            using (ISession session = NHibernateHelper.OpenSession())
            {
                using (ITransaction transaction = session.BeginTransaction())
                {
                    session.Save(Pessoa);
                    transaction.Commit();
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Pessoa.hbm.xml

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
               assembly="CarvalhoRodrigues.Domain"
               namespace="CarvalhoRodrigues.Domain.Cadastro">

  <class name="Pessoa">
    <id name="Id">
      <generator class="identity" />
    </id>
    <property name="Tipo" />

    <bag name="Endereco" lazy="false">
      <key column="PessoaId" />
      <one-to-many class="Endereco" />
    </bag>

    <joined-subclass name="PessoaFisica">
      <key column="PessoaId" />
      <property name="CPF" />
      <property name="Nome" />
      <property name="DataNascimento" />
    </joined-subclass>

    <joined-subclass name="PessoaJuridica">
      <key column="PessoaId" />
      <property name="CNPJ" />
      <property name="RazaoSocial" />
      <property name="DataConstituicao" />
      <property name="NomeFantasia" />
    </joined-subclass>

  </class>

</hibernate-mapping>
Run Code Online (Sandbox Code Playgroud)

错误:

TestCase'CarvalhoRodrigues.Tests.GenerateSchema_Fixture.Can_add_pessoa'失败:NHibernate.PropertyAccessException:发生异常CarvalhoRodrigues.Domain.Cadastro.Pessoa.Id的吸气器----> System.Reflection.TargetException:Objetonãocoecocomo tipo de destino.em NHibernate.Properties.BasicPropertyAccessor.BasicGetter.Get(Object target)em NHibernate.Engine.UnsavedValueFactory.GetUnsavedIdentifierValue(String unsavedValue,IGetter identifierGetter,IType identifierType,ConstructorInfo构造函数)em NHibernate.Tuple.PropertyFactory.BuildIdentifierProperty(PersistentClass mappedEntity,IIdentifierGenerator generator) em NHibernate.Tuple.Entity.EntityMetamodel..ctor(PersistentClass persistentClass,ISessionFactoryImplementor sessionFactory)em NHibernate.Persister.Entity.AbstractEntityPersister..ctor(PersistentClass persistentClass,ICacheConcurrencyStrategy cache,ISessionFactoryImplementor factory)em NHibernate.Persister.Entity.JoinedSubclassEntityPersister..ctor (PersistentClass persistentClass,ICacheConcurrencyStrategy cache,ISessionFactoryImplementor factory,IMapping mapping)em NHibernate.Persister.PersisterFactory.CreateClassPersister(PersistentClass model,ICacheConcurrencyStrategy cache,ISessionFactoryImplementor factory,IMappi ng cfg)em NHibernate.Impl.SessionFactoryImpl..ctor(配置cfg,IMapping映射,设置设置,EventListeners监听器)em NHibernate.Cfg.Configuration.BuildSessionFactory()D:\ Projetos\CarvalhoRodrigues\CarvalhoRodrigues.Domain\NhibernateHelper.cs( 19,0):em CarvalhoRodrigues.Domain.NHibernateHelper.get_SessionFactory()D:\ Projetos\CarvalhoRodrigues\CarvalhoRodrigues.Domain\NhibernateHelper.cs(27,0):em CarvalhoRodrigues.Domain.NHibernateHelper.OpenSession()D:\ Projetos\CarvalhoRodrigues\CarvalhoRodrigues.Domain\Repositories\Cadastro\PessoaRepository.cs(35,0):em CarvalhoRodrigues.Domain.Repositories.Cadastro.PessoaRepository.Inserir(Pessoa Pessoa)D:\ Projetos\CarvalhoRodrigues\CarvalhoRodrigues.Domain\Tests\PessoaTests. cs(47,0):em CarvalhoRodrigues.Tests.GenerateSchema_Fixture.Can_add_pessoa() - CalendarException em System.Reflection.RuntimeMethodInfo.CheckConsistency(Object target)em System.Reflection.RuntimeMethodInfo.Invoke(Object obj,BindingFlags invokeAttr,Binder binder,Object []参数,CultureInfo文化,布尔值skipVisibilityChecks)em System.Reflection.RuntimeMethodInfo.Invoke(Object obj,BindingFlags invokeAttr,Binder binder,Object []参数,CultureInfo文化)em System.Reflection.RuntimePropertyInfo.GetValue(Object obj ,Object [] index)em NHibernate.Properties.BasicPropertyAccessor.BasicGetter.Get(Object target)

"Objetonãomecoidecomo tipo de destino"在葡萄牙语中的意思是"对象与目标类型不匹配".我无法弄清楚我做错了什么.在我在Pessoa.hbm.xml中添加第二个join-subclass并将映射到PessoaJuridica.cs之前,完全相同的代码正在工作,然后我将该映射放在那里并开始收到此错误.

Sim*_*son 9

我可能在这里很狡猾,但PessoaJuridica不应该来自Pessoa或PessoaFisica吗?