Updates com o EntityFramework podem ser algo um pouco “misterioso” quando se não sabe ao exato qual é o processo que o EntityFramework gera isto pode se tornar uma pequena dor de cabeça.
Vamos apresentar dois cenários:
// Retornar objeto do banco de dados // Alterar o nome // Marcar o objeto como modificado //Salvar o objeto inteiro no banco. using (var ctx = new SchoolDBEntities()) { stud = ctx.Students.Where(s => s.StudentName == "Estudante João").FirstOrDefault<Student>(); stud.StudentName = "Estudante João da Silva"; ctx.Entry(stud).State = System.Data.Entity.EntityState.Modified; ctx.SaveChanges(); } // Retornar objeto do banco de dados // Realizar o attach do objeto // Alterar o nome // Marcar o atributo como modificado //Salvar o objeto no banco, porém indo somente o update do parametro modificado using (var ctx = new SchoolDBEntities()) { stud = ctx.Students.Where(s => s.StudentName == "Estudante João").FirstOrDefault<Student>(); ctx.Attach(updatedUser); stud.StudentName = "Estudante João da Silva"; ctx.Entry(addressgeo).Property(x => x.StudentName).IsModified = true; ctx.SaveChanges(); }
Os dois cenários são parecidos, porém fica claro a importância de se utilizar o comando correto no momento do Update. Imagine um objeto que possua muitos atributos e você ficar dando update em todos os campos todas as vezes que algum campo é modificado? Isto iria atrapalhar muito a performance, sem contar em updates acidentais com campos calculados por exemplo.
Um grande abraço pessoal!