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()”时返回如下错误:“EntityKey 属性只能在属性的当前值为空时设置。”

表: pessoas >> pessoas_telefones << 电话 pessoas >> pessoas_enderecos << enderecos

4

1 回答 1

1

我不太明白你的代码。但是我确实注意到你没有调用SaveChanges()inside frame2objeto(),所以一旦你退出 using 块,它们就会被丢弃。

即使您确实保存了更改,当您从它返回到您的salvar()时,您也不会看到任何更改,因为它完全是一个单独的上下文。

于 2012-11-29T18:26:58.953 回答