Usuário com melhor resposta
Entity Framework - UPDATE não funciona.

Pergunta
-
Boa noite galera,
Estou tendo problemas em fazer um update em uma entidade que possui uma lista de detalhes. Exemplo:
public class Pessoa { public int Id { get; set; } public string Nome { get; set; } public virtual ICollection<Livro> Livros { get; set; } } public class Livro { public int Id { get; set; } public string Nome { get; set; } public int IdPessoa { get; set; } } Public class Teste { public void Atualizar() { Pessoa pessoa = (Pessoa)Context.Set<Pessoa >().Find(1); pessoa.Livros.Add(new Livro() { Nome = "Livro1" }); Context.Entry(Pessoa).State = EntityState.Modified; Context.SaveChanges(); } }
Lembrando que na inclusão de um registro novo, funciona, pois uso o Context.Set<T>().Add(entity);
Só não funciona no update.
Respostas
-
Enfim, consegui resolver o meu problema.
Acontece que o EF não atualiza automaticamente os ítens inseridos na lista de uma entidade já existente. Então, tive que fazer da seguinte forma:public void Atualizar() { Pessoa pessoa = (Pessoa)Context.Set<Pessoa >().Find(1); pessoa.Livros.Add(new Livro() { Nome = "Livro1" }); foreach(var livro in pessoa.Livros) { livro.IdPessoa = pessoa.Id; Context.Entry(livro).State = livro.Id.Equals(0) ? EntityState.Added : EntityState.Modified; } Context.Entry(Pessoa).State = EntityState.Modified; Context.SaveChanges(); }
Eu não sei se essa é a forma mais correta e/ou elegante de se fazer, mas foi a única solução viável que encontrei.
- Marcado como Resposta alexandre_cavaleiro domingo, 12 de abril de 2015 20:44
Todas as Respostas
-
-
Renato, já fiz. E mesmo assim não deu certo.
Fiz um teste da seguinte forma:no ActionResult Edit(), recuperei o registro, adicionei o livro e salvei. Deu certo. Porém, quando preencho ele dentro do form na view, ele não salva.
Outra coisa, quando tenho um registro de livros já cadastrado, na view ele aparece normalmente, porém, ao salvar, no action da ação salvar, ele retorna a lista de livros em branco.
Lembrando que trabalho com o model Pessoa
- Editado alexandre_cavaleiro domingo, 12 de abril de 2015 14:13 complemento da informação.
-
Enfim, consegui resolver o meu problema.
Acontece que o EF não atualiza automaticamente os ítens inseridos na lista de uma entidade já existente. Então, tive que fazer da seguinte forma:public void Atualizar() { Pessoa pessoa = (Pessoa)Context.Set<Pessoa >().Find(1); pessoa.Livros.Add(new Livro() { Nome = "Livro1" }); foreach(var livro in pessoa.Livros) { livro.IdPessoa = pessoa.Id; Context.Entry(livro).State = livro.Id.Equals(0) ? EntityState.Added : EntityState.Modified; } Context.Entry(Pessoa).State = EntityState.Modified; Context.SaveChanges(); }
Eu não sei se essa é a forma mais correta e/ou elegante de se fazer, mas foi a única solução viável que encontrei.
- Marcado como Resposta alexandre_cavaleiro domingo, 12 de abril de 2015 20:44