1
pessoas objPessoa; 
DataTable dtTelefones; 
DataTable dtEnderecos; 
private void salvar() 
{ 
    using (EarthWorkEntities ctx = new EarthWorkEntities()) 
    { 
     frame2objeto(); 
     ctx.AddTopessoas(objPessoa); 
     ctx.SaveChanges(); 
    } 
} 


private void frame2objeto() 
     { 
      using (EarthWorkEntities ctx = new EarthWorkEntities()) 
      { 
       objPessoa = new pessoas(); 
       //Pessoa 
       objPessoa.pes_cpfcnpj = textCpf.Text; 
       objPessoa.pes_nome = textNome.Text; 
       objPessoa.pes_sexo = cbSexo.SelectedIndex == 0 ? "M" : "F"; 

       //Cliente 
       clientes cliente = new clientes(); 
       cliente.cli_dt_ultima = DateTime.Now; 
       objPessoa.clientes.Add(cliente); 
       //Telefones 
       foreach (DataRow row in dtTelefones.Rows) 
       { 
        telefones objTelefones; 
        objTelefones = new telefones(); 
        objTelefones.EntityKey = null; 
        objTelefones.tel_contato = row["Contato"].ToString(); 
        objTelefones.tel_ddd = row["DDD"].ToString(); 
        objTelefones.tel_numero = row["Numero"].ToString(); 
        string tipo = row["Tipo"].ToString(); 
        tipos_telefones tipo_telefone = (from t in ctx.tipos_telefones 
             where t.tptel_descr == tipo 
             select t).FirstOrDefault<tipos_telefones>(); 
        objTelefones.tipos_telefones = tipo_telefone; 
        objPessoa.telefones.Add(objTelefones); 
       } 
       //Endereço 
       foreach (DataRow row in dtEnderecos.Rows) 
       { 
        enderecos objEnderecos; 
        objEnderecos = new enderecos(); 
        objEnderecos.EntityKey = null; 
        objEnderecos.end_bairro = row["Bairro"].ToString(); 
        objEnderecos.end_cep = row["CEP"].ToString(); 
        objEnderecos.end_cidade = row["Cidade"].ToString(); 
        objEnderecos.end_complemento = row["Complemento"].ToString(); 
        objEnderecos.end_logradouro = row["Logradouro"].ToString(); 
        objEnderecos.end_numero = row["Numero"].ToString(); 
        string tipo = row["Tipo"].ToString(); 
        tipos_enderecos tipo_endereco = (from t in ctx.tipos_enderecos 
             where t.tpend_descr == tipo 
             select t).FirstOrDefault<tipos_enderecos>(); 
        objEnderecos.tipos_enderecos = tipo_endereco; 
        objPessoa.enderecos.Add(objEnderecos); 
       } 
      } 
     } 

当运行命令“AddTopessoas()”返回以下错误:“当属性的当前值为null该属性的EntityKey只能设置”实体框架插入许多一对多数据库第一

表: pessoas >> pessoas_telefones < < telefones pessoas >> pessoas_enderecos < < enderecos

回答

1

我不明白你的代码。但我注意到你并没有在frame2objeto()内拨打SaveChanges(),所以一旦你使用了block,他们就会被丢弃。

尽管您保存了更改,但当您将其更改为您的salvar()时,您将不会看到任何更改,因为它完全是单独的上下文。

+0

我没有粘贴按钮事件。 点击调用两种方法的按钮。 –

+0

太棒了!工作。 –