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プロパティは、プロパティの現在の値がnullの場合にのみ設定できます。」

テーブル:pessoas >> pessoas_telefones << telefones pessoas >> pessoas_enderecos << enderecos

4

1 に答える 1

1

私はあなたのコードをよく理解していませんでした。SaveChanges()しかし、私はあなたが内部で呼び出していないことに気づいたframe2objeto()ので、ブロックを使用しなくなると、それらは破棄されました。

変更を保存したとしても、そこから に戻ると、salvar()まったく別のコンテキストであるため、変更は表示されません。

于 2012-11-29T18:26:58.953 に答える