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!


