【问题标题】:Entity Framework Insert many-to-many database first实体框架先插入多对多数据库
【发布时间】:2012-11-29 17:09:37
【问题描述】:
    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_telefones > pessoas_enderecos

【问题讨论】:

    标签: c# entity-framework entity-framework-4.1 many-to-many entity-relationship


    【解决方案1】:

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

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

    【讨论】:

    • 我还没有粘贴按钮事件。单击调用这两种方法的按钮。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-24
    • 2011-06-02
    • 2018-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多