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

太棒了!工作。 –