Usuário com melhor resposta
Insert com Entity Framework (tabelas relacionadas)

Pergunta
-
Respostas
-
Bom dessa forma acima é só tira o ctx.SaveChanges() e coloca-lo fora do foreach que ele faz sozinho.....
Obrigado.
- Marcado como Resposta Marcos Bazilio sexta-feira, 27 de setembro de 2013 14:19
Todas as Respostas
-
-
Estou fazendo desse jeito,
if (verifica == null) { var f = new funcionario { nomeFuncionario = TB_Nome.Text, dataNascFuncionario = Convert.ToDateTime(TB_DataNas.Text), dataAdmiFuncionario = Convert.ToDateTime(TB_DataAdm.Text), statusFuncionario = "1", }; ctx.AddTofuncionario(f); DataTable documentos = new DataTable(); documentos = Session["tab"] as DataTable; foreach (DataRow row in documentos.Rows) { var d = new documento { numeroDocumento = row["Documento"].ToString(), validadeDocumento = null, idFuncionario = f.idFuncionario, idTipoDocumento = Convert.ToInt32(row["IdTipoDoc"]), }; ctx.documento.AddObject(d); } ctx.SaveChanges(); }
E não esta indo.. na session esta vindo um datatable de documentos contendo um id e o número do documento
-
-
-
no mesmo lugar que está o ctx.documento.AddObject(d);
Você vai substituir a linha acima
- Editado Cesar Mendes da Silva terça-feira, 24 de setembro de 2013 15:02 alteração
-
-
Aparece esse erro....
'Web.BDEntities' does not contain a definition for 'Entry' and no extension method 'Entry' accepting a first argument of type 'Web.BDEntities' could be found (are you missing a using directive or an assembly reference?) C:\Nova pasta\Web\Web_v2\Web\Web\Default.aspx.cs
-
-
-
Desculpe a demora, deste jeito também não funcionou, aparece o seguinte erro...
"A instrução de atualização, inserção ou exclusão de repositório afetou um número inesperado de linhas (0). As entidades podem ter sido modificadas ou excluídas após o carregamento. Atualize as entradas do ObjectStateManager."
-
Cara, mais fácil no segundo for você buscar a entidade documento pelo id e setar os valores que você quer e depois adicionar e salvar.
O problema que está ocorrendo é o seguinte, quando você cria new documento() o entity framework entende que é um novo registro e não um que já existe.
- Editado Cesar Mendes da Silva terça-feira, 24 de setembro de 2013 19:08 correção
-
Mais é um novo, fiz um cadastro único, onde o cara vai cadastrar um funcionário, e nesta tela, ele, pode adicionar vários documentos para o funcionário através de um único campo, onde eu monto o datatable, e no fim ele clica no salvar.... ai rola o insert nas tabelas...
Elas estão relacionadas, por isso eu preciso pegar o id do funcionário e jogar na tabela documentos
-
-
-
-
fiz esse teste, mas tb não funcionou...
o problema é neste foreach.. fiz dessa forma....
if (verifica == null) { funcionario func = new funcionario { nomeFuncionario = TB_Nome.Text, dataNascFuncionario = Convert.ToDateTime(TB_DataNas.Text), dataAdmiFuncionario = Convert.ToDateTime(TB_DataAdm.Text), statusFuncionario = "1", }; ctx.AddTofuncionario(func); ctx.SaveChanges(); DataTable documentos = new DataTable(); documentos = Session["tab"] as DataTable; var cod = (from r in ctx.funcionario orderby r.idFuncionario descending select r).First(); foreach (DataRow row in documentos.Rows) { var doc = new documento { numeroDocumento = row["Documento"].ToString(), validadeDocumento = null, idFuncionario = Convert.ToInt32(cod), idTipoDocumento = Convert.ToInt32(row["IdTipoDoc"]), }; ctx.AddTodocumento(doc); ctx.SaveChanges(); }
e no foreach dá problema...
-
-
-
Então aqui eu tinha que fazer algum modo de cada passada no foreach ele atribuir o id....
foreach (DataRow row in documentos.Rows) { documento doc = new documento { numeroDocumento = row["Documento"].ToString(), validadeDocumento = null, idFuncionario = Convert.ToInt32(Session["codigo"]), idTipoDocumento = Convert.ToInt32(row["IdTipoDoc"]), }; ctx.AddTodocumento(doc); ctx.SaveChanges(); }
-
Bom dessa forma acima é só tira o ctx.SaveChanges() e coloca-lo fora do foreach que ele faz sozinho.....
Obrigado.
- Marcado como Resposta Marcos Bazilio sexta-feira, 27 de setembro de 2013 14:19
-