Mam projekt MVC i przy użyciu Entity Framework Code First i POCO obiektów dla bazy danych. Na przykład:Jak aktualizować podmioty powiązane w 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;}
}
Mam ActionResult, który tworzy lub edytuje model. Problem polega na wywołaniu tego ActionResult w celu zaktualizowania modelu, a zmieniono model.B
, relacja nie jest zapisana w bazie danych. Kiedy wywoływany jest ActionResult w celu utworzenia nowego obiektu, działa on zgodnie z oczekiwaniami. Jak rozwiązać ten problem?
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);
}
w stanie rozłączonym, gdy nie masz klucza obcego, jest kilka luki, których EF nie może obejść i musisz udowodnić dodatkowy kod. W przeciwnym razie nie może zobaczyć związku. Dzięki właściwości FK jest to wartość skalarna i łatwiej EF może śledzić różne procesy. Naprawdę napisałem kolumnę z danymi z 2012 roku o tym dokładnym temacie! EF jest znacznie łatwiejszy w użyciu, gdy masz właściwość skalarną FK. W przeciwnym razie wiele funkcji, które chcesz "po prostu pracować", nie może i nie zmusza Cię do lepszego zrozumienia tego, co się dzieje i dostarczenia potrzebnych informacji. Niestety nie widziałem brakującego FK przed –
@JulieLerman, bez problemu, dzięki za pomoc! :) – Marthijn