En general, es mejor no vincular directamente al objeto de entidad, en lugar de eso, cree un modelo de edición y vincule a eso.
Después de todo ... ¿qué impide que alguien publique valores que no quiere cambiar con este enfoque?
El principal problema aquí es el hecho de que los cambios vinculantes modelo MVC las propiedades en el modelo antes de su contexto, por tanto, en un marco de la entidad no sabe qué valores han cambiado (y, por tanto, que debe ser actualizado)
Has mitigado eso ligeramente con db.Entry(c).State = EntityState.Modified;
, pero eso le dice a la estructura de la entidad que todo el registro se ha actualizado.
lo haría normalmente lo siguiente:
- se unen a un modelo específicamente para este primer controlador
- crear una instancia de la clase de entidad que desea actualizar, poner la identificación en consecuencia y adjuntarlo a la
contexto
- actualización de las propiedades en la entidad a ser el mismo que el modelo que aglutinaba a (objeto está conectado y, por lo tanto marco de la entidad es el seguimiento de las columnas que se están cambiando ahora)
- SaveChanges
Paso 3 es un poco tedioso, por tanto, considerar el uso de una herramienta como automapper para facilitar las cosas
Editar:
[HttpPost]
public ActionResult Edit(Company c)
{
if (ModelState.IsValid)
{
Company dbCompayObjct = new Company { companyId = c.companyId };
db.Company.Attach(dbCompayObjct);
dbCompanyObjct.CompanyName = c.CompanyName;
dbCompanyObjct.City = c.City;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(c);
}
Hola Martin, gracias por su respuesta, modifico la acción de edición al siguiente código, ¿podría decirme si esto es lo que quería decir? srry acaba de comenzar el aprendizaje y la EF MVC [HttpPost] pública ActionResult Editar (Compañía c) { si (ModelState.IsValid) { Compañía dbCompanyObjct = db.Company.Find (c.companyID); dbCompanyObjct.CompanyName = c.CompanyName; dbCompanyObjct.City = c.City; db.SaveChanges(); return RedirectToAction ("Índice"); } return Ver (c); } Además, ¿podría explicarme qué es Automapper? ¿como lo uso? gracias – Ben
me disculpo por el código no alineado, difícil de leer, no tengo idea de por qué no se está alineando ... por favor, si el código es correcto. – Ben
Eso funcionará, publicaré una actualización rápida para mostrar que no necesita el primer Find –