Tengo 2 proyectos: una biblioteca de clases que contiene un modelo de marco de entidad EDM y un proyecto ASP.NET MVC independiente.Cómo actualizar EF 4 Entity en ASP.NET MVC 3?
Tengo problemas con la forma en que supone editar y guardar los cambios en una entidad que usa MVC. En mi controlador que tengo:
public class UserController : Controller
{
public ActionResult Edit(int id)
{
var rep = new UserRepository();
var user = rep.GetById(id);
return View(user);
}
[HttpPost]
public ActionResult Edit(User user)
{
var rep = new UserRepository();
rep.Update(user);
return View(user);
}
}
Mi UserRepository
tiene un método de actualización de la siguiente manera:
public void Update(User user)
{
using (var context = new PDS_FMPEntities())
{
context.Users.Attach(testUser);
context.ObjectStateManager.ChangeObjectState(testUser, EntityState.Modified);
context.SaveChanges();
}
}
Ahora, cuando hago clic en 'Guardar' en la página de edición de usuario, el parámetro user
sólo contiene dos valores poblado: Id y FirstName. Supongo que se debe al hecho de que solo estoy mostrando esas dos propiedades en la vista.
Mi pregunta es esta, si estoy actualizando el nombre del usuario, y luego quiero guardarlo, ¿qué se supone que debo hacer con las otras propiedades User
que no se muestran en la vista, ya que ahora contienen 0 o Valores NULL en el objeto user
?
He estado leyendo mucho sobre el uso de entidades de código auxiliar, pero no llego a ninguna parte rápidamente, ya que ninguno de los ejemplos que he visto realmente funciona. es decir, sigo obteniendo excepciones relacionadas con EntityKey.
¿Alguien me puede indicar un buen tutorial/ejemplo de cómo actualizar las entidades EF 4 utilizando una clase de repositorio, llamada por un MVC front-end?
@ Jason Evans - que se conoce como la técnica de talón, y sólo funciona para las propiedades escalares. Si tiene una propiedad de navegación como 'User.Addresses' a la que se está vinculando en su Vista, lo anterior no actualizará las direcciones. Le aconsejaría que recupere nuevamente el Usuario de la Base de Datos, luego use 'TryUpdateModel' para actualizar el objeto. Consulte mi pregunta/respuesta reciente aquí para obtener más información: http://stackoverflow.com/questions/4653834/asp-net-mvc-ef4-poco-repository-how-to-update-relationships/4666466#4666466 – RPM1984
@ RPM1984 - Eso ahorraría molestias con las propiedades de navegación. La única preocupación que tengo con TryUpdateModel() es el diseño. Estoy tratando de asegurarme de que pueda usar un repositorio para tratar de obtener/guardar/eliminar cosas. Al usar TryUpdateModel(), ¿tiene sugerencias de un buen diseño sobre cómo codificar esto? Simplemente no quiero que el controlador se ocupe de ningún código relacionado con la base de datos si ves lo que quiero decir. –
No, no estoy seguro de lo que quiere decir. Sin embargo, supongo que creará un método estándar de "Guardar" en su Repositorio, que "descubrirá" si se trata de un objeto nuevo/existente (basado en ID, por ejemplo). Por lo tanto, no necesita llamar a repository.Update o repository.Add. Simplemente TryUpdateModel y luego Guardar. Si usted no quiere que su controlador toque su entidad, no entiendo su preocupación. Los controladores están destinados a actualizar el modelo. Y todo lo que hace es actualizar un "objeto": su repositorio sigue preocupado por la persistencia de dicho objeto. – RPM1984