Tengo un proyecto MVC y el uso de Entity Framework Code First y objetos POCO para la base de datos. Por ejemplo:Cómo actualizar entidades relacionadas en Entity Framework
public class ClassA
{
public int? Id {get; set;}
public string Name { get; set;}
public virtual ClassB B {get; set;}
}
public class ClassB
{
public int? Id {get;set;}
public string Description {get;set;}
}
Tengo un ActionResult que crea o edita un modelo. El problema es cuando llamo a este ActionResult para actualizar el modelo y se ha cambiado model.B
, la relación no se guarda en la base de datos. Cuando se llama a ActionResult para crear un nuevo objeto, funciona como se esperaba. ¿Cómo puedo solucionar esto?
public ActionResult Save(ClassA model)
{
model.B = GetBFromDb(model.B.Id.Value);
if(ModelState.IsValid)
{
if (id.HasValue)
{
context.Entry(model).State = System.Data.EntityState.Modified;
}
else
{
context.ClassAs.Add(model);
}
context.SaveChanges();
// redirect to index etc.
}
return View("EditForm", model);
}
en desconectado, cuando no tiene una clave externa, hay algunas lagunas que EF no puede solucionar y tiene que probar código adicional. De lo contrario, no puede ver la relación. Con la propiedad FK, es un valor escalar y más fácil para EF realizar un seguimiento de los procesos. De hecho, escribí mi columna de puntos de datos de enero de 2012 sobre este tema exacto. EF es mucho más fácil de usar cuando tienes una propiedad escalar FK. De lo contrario, muchas funciones que usted espera "solo funcionan" no pueden y le obligan a tener una mejor comprensión de lo que está sucediendo y cómo proporcionar la información necesaria. Lo siento, no he visto el FK faltante antes de –
@JulieLerman, no hay problema, gracias por su ayuda! :) – Marthijn