He estado explorando diferentes métodos para editar / actualizar un registro dentro de Entity Framework 5 en un entorno ASP.NET MVC3, pero hasta ahora ninguno de ellos cumple todos los cuadros que necesito. Te explicaré por qué.
He encontrado tres métodos con los cuales mencionaré los pros y los contras:
Método 1 - Cargue el registro original, actualice cada propiedad
var original = db.Users.Find(updatedUser.UserId);
if (original != null)
{
original.BusinessEntityId = updatedUser.BusinessEntityId;
original.Email = updatedUser.Email;
original.EmployeeId = updatedUser.EmployeeId;
original.Forename = updatedUser.Forename;
original.Surname = updatedUser.Surname;
original.Telephone = updatedUser.Telephone;
original.Title = updatedUser.Title;
original.Fax = updatedUser.Fax;
original.ASPNetUserId = updatedUser.ASPNetUserId;
db.SaveChanges();
}
Pros
- Puede especificar qué propiedades cambian
- Las vistas no necesitan contener todas las propiedades
Contras
- 2 x consultas en la base de datos para cargar el original y luego actualizarlo
Método 2: cargar el registro original, establecer valores modificados
var original = db.Users.Find(updatedUser.UserId);
if (original != null)
{
db.Entry(original).CurrentValues.SetValues(updatedUser);
db.SaveChanges();
}
Pros
- Solo las propiedades modificadas se envían a la base de datos.
Contras
- Las vistas deben contener todas las propiedades
- 2 x consultas en la base de datos para cargar el original y luego actualizarlo
Método 3: adjunte el registro actualizado y establezca el estado en EntityState.Modified
db.Users.Attach(updatedUser);
db.Entry(updatedUser).State = EntityState.Modified;
db.SaveChanges();
Pros
- 1 x consulta en la base de datos para actualizar
Contras
- No se puede especificar qué propiedades cambian
- Las vistas deben contener todas las propiedades
Pregunta
Mi pregunta para ustedes chicos; ¿Hay alguna manera limpia de lograr este conjunto de objetivos?
- Puede especificar qué propiedades cambian
- Las vistas no necesitan contener todas las propiedades (como la contraseña)
- 1 x consulta en la base de datos para actualizar
Entiendo que esto es algo bastante menor para señalar, pero es posible que me falte una solución simple para esto. Si no, el método uno prevalecerá ;-)