我在保存具有关联的实体时遇到问题。下面是我的代码,它给出了错误:
"使属性值脱水错误 Data.Entities.Pessoa_fisica.NOME_PAI"
如果有人帮助我,我会很高兴的!提前谢谢!
public class Pessoa_fisica
{
public virtual int ID { get; set; }
public virtual Pessoa Pessoa { get; set; }
public virtual Estado_civil Estado_civil { get; set; }
public virtual string CPF { get; set; }
public virtual string RG { get; set; }
public virtual string ORGAO_RG { get; set; }
public virtual DateTime DATA_EMISSAO_RG { get; set; }
public virtual DateTime DATA_NASCIMENTO { get; set; }
public virtual string SEXO { get; set; }
public virtual string NATURALIDADE { get; set; }
public virtual string NACIONALIDADE { get; set; }
public virtual string RACA { get; set; }
public virtual string TIPO_SANGUE { get; set; }
public virtual string CNH_NUMERO { get; set; }
public virtual string CNH_CATEGORIA { get; set; }
public virtual DateTime CNH_VENCIMENTO { get; set; }
public virtual string TITULO_ELEITORAL_NUMERO { get; set; }
public virtual int TITULO_ELEITORAL_SECAO { get; set; }
public virtual string RESERVISTA_NUMERO { get; set; }
public virtual int RESERVISTA_CATEGORIA { get; set; }
public virtual int TITULO_ELEITORAL_ZONA { get; set; }
public virtual string NOME_MAE { get; set; }
public virtual string NOME_PAI { get; set; }
}
public class Pessoa
{
public virtual int ID { get; set; }
public virtual IList<Pessoa_fisica> PessoasFisicas { get; set; }
public virtual string NOME { get; set; }
public virtual string TIPO { get; set; }
public virtual string EMAIL { get; set; }
public virtual string SITE { get; set; }
public virtual string CLIENTE { get; set; }
public virtual string FORNECEDOR { get; set; }
public virtual string COLABORADOR { get; set; }
public virtual string CONVENIO { get; set; }
public virtual string CONTADOR { get; set; }
public virtual string TRANSPORTADORA { get; set; }
}
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" auto-import="true" assembly="Data" namespace="Data.Entities">
<class name="Pessoa" table="pessoa" dynamic-update="true" >
<cache usage="read-write"/>
<id name="ID" column="ID" type="int">
<generator class="native" />
</id>
<bag name="PessoasFisicas"
lazy="true"
inverse="true"
batch-size="25"
cascade="save-update">
<key column="ID" />
<one-to-many class="Pessoa_fisica" />
</bag>
<property name="NOME" />
<property name="TIPO" />
<property name="EMAIL" />
<property name="SITE" />
<property name="CLIENTE" />
<property name="FORNECEDOR" />
<property name="COLABORADOR" />
<property name="CONVENIO" />
<property name="CONTADOR" />
<property name="TRANSPORTADORA" />
</class>
</hibernate-mapping>
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" auto-import="true" assembly="Data" namespace="Data.Entities">
<class name="Pessoa_fisica" table="pessoa_fisica" dynamic-update="true" >
<cache usage="read-write"/>
<id name="ID" column="ID" type="int">
<generator class="native" />
</id>
<many-to-one not-null="true" name="Pessoa" column="ID" />
<many-to-one not-null="false" name="Estado_civil" column="ID" />
<property name="CPF" />
<property name="RG" />
<property name="ORGAO_RG" />
<property name="DATA_EMISSAO_RG" />
<property name="DATA_NASCIMENTO" />
<property name="SEXO" />
<property name="NATURALIDADE" />
<property name="NACIONALIDADE" />
<property name="RACA" />
<property name="TIPO_SANGUE" />
<property name="CNH_NUMERO" />
<property name="CNH_CATEGORIA" />
<property name="CNH_VENCIMENTO" />
<property name="TITULO_ELEITORAL_NUMERO" />
<property name="TITULO_ELEITORAL_SECAO" />
<property name="RESERVISTA_NUMERO" />
<property name="TITULO_ELEITORAL_ZONA" />
<property name="RESERVISTA_CATEGORIA" />
<property name="NOME_MAE" />
<property name="NOME_PAI" />
</class>
</hibernate-mapping>
if (ModelState.IsValid)
{
ISession session = Data.Entities.NHIbernateSession.OpenSession();
ITransaction tx = session.BeginTransaction();
Data.Entities.Pessoa objPessoa = new Data.Entities.Pessoa();
Data.Entities.Pessoa_fisica objPessoaFisica = new Data.Entities.Pessoa_fisica();
objPessoaFisica.Pessoa = new Data.Entities.Pessoa();
objPessoa.TIPO = "F";
objPessoa.NOME = pessoa.Nome;
objPessoa.EMAIL = pessoa.Email;
objPessoa.SITE = pessoa.Site;
objPessoa.CLIENTE = pessoa.Cliente ? "S" : "N";
objPessoa.FORNECEDOR = pessoa.Cliente ? "S" : "N";
objPessoa.COLABORADOR = pessoa.Cliente ? "S" : "N";
objPessoa.CONVENIO = pessoa.Cliente ? "S" : "N";
objPessoa.CONTADOR = pessoa.Cliente ? "S" : "N";
objPessoa.TRANSPORTADORA = pessoa.Cliente ? "S" : "N";
objPessoaFisica.Pessoa = objPessoa;
objPessoaFisica.CPF = pessoa.CPF.Replace(".", "").Replace("-", "");
objPessoaFisica.DATA_NASCIMENTO = Convert.ToDateTime(pessoa.Nascimento);
objPessoaFisica.Estado_civil = session.Query<Data.Entities.Estado_civil>().Where(c => c.ID == pessoa.EstadoCivil).First();
objPessoaFisica.RACA = pessoa.Raca;
objPessoaFisica.TIPO_SANGUE = pessoa.TipoSanguineo;
objPessoaFisica.NACIONALIDADE = pessoa.Nacionalidade;
objPessoaFisica.NATURALIDADE = pessoa.Naturalidade;
objPessoaFisica.NOME_PAI = pessoa.NomePai;
objPessoaFisica.NOME_MAE = pessoa.NomeMae;
objPessoaFisica.RG = pessoa.RG.Replace(".", "");
objPessoaFisica.DATA_EMISSAO_RG = Convert.ToDateTime(pessoa.EmissaoRG);
objPessoaFisica.ORGAO_RG = pessoa.OrgaoEmissor;
objPessoaFisica.RESERVISTA_NUMERO = pessoa.NumeroReservista;
objPessoaFisica.RESERVISTA_CATEGORIA = Convert.ToInt32(pessoa.ReservistaCategoria);
objPessoaFisica.SEXO = pessoa.Sexo;
objPessoaFisica.CNH_NUMERO = pessoa.NumeroCnh;
objPessoaFisica.CNH_VENCIMENTO = Convert.ToDateTime(pessoa.VencimentoCnh);
objPessoaFisica.CNH_CATEGORIA = pessoa.CategoriaCnh;
objPessoaFisica.TITULO_ELEITORAL_NUMERO = pessoa.NumeroTitulo;
objPessoaFisica.TITULO_ELEITORAL_ZONA = Convert.ToInt16(pessoa.Zona);
objPessoaFisica.TITULO_ELEITORAL_SECAO = Convert.ToInt16(pessoa.Secao);
objPessoa.PessoasFisicas = new List<Data.Entities.Pessoa_fisica>();
objPessoa.PessoasFisicas.Add(objPessoaFisica);
session.SaveOrUpdate(objPessoa);
session.Flush();
session.Clear();
tx.Commit();
return RedirectToAction("New", "PessoaFisica");
答案 0 :(得分:0)
我不知道这是否会导致您描述的问题,但这至少是错误的:
<many-to-one not-null="true" name="Pessoa" column="ID" />
<many-to-one not-null="false" name="Estado_civil" column="ID" />
多对一是声明它的表中的外键,指向引用的表。所以外键&#34; ID&#34;在表pessoa_fisica中声明了两次。 (它可以通过NH合并为一个,导致列数错误,并导致最后一列的错误,即NOME_PAI。只是一个理论。)
将其更改为:
<many-to-one not-null="true" name="Pessoa" column="Pessoa_FK" />
<many-to-one not-null="false" name="Estado_civil" column="Estado_civil_FK" />
不要忘记更新相关的包:
<bag name="PessoasFisicas"
lazy="true"
inverse="true"
batch-size="25"
cascade="save-update">
<key column="Pessoa_FK" />
<one-to-many class="Pessoa_fisica" />
</bag>
答案 1 :(得分:0)
在我的情况下,有两个同名的属性。
例: 班级人员 { 字符串FirstName, 字符串LastName, 字符串电子邮件, 联系ContactInfo }
班级联系 { string PhoneNumber, 字符串电子邮件 }
要解决此问题,我必须从Person类中删除电子邮件。
注意:联系人是一个组件。当它在另一个类中用作属性时,如在Person类中,它的属性将成为Person表上的列。请参阅下面的人员表。
姓 姓 电话号码 电子邮件