Asp.net-Mvc-3
如何在實體框架中更新實體的導航屬性
在帶有實體框架的 ASP .NET MVC 3 中,我有一個域對象,它具有引用另一個對象的導航屬性,如下所示:
public class Person { public String Name {get;set;} public Guid CompanyID{get;set;} [ForeignKey(CompanyID)] public virtual CompanyType Company{ get; set; } }當我創建 Person 的實例並嘗試將其添加到數據庫時,DBContext 會保留此實體“Person”的記憶體並將其發送到數據庫。因此,稍後在同一上下文實例的生命週期中,當我嘗試訪問此實體時,Company 欄位始終為 null,因為導航屬性從未更新。
有沒有辦法用數據庫中存在的內容更新導航屬性?
延遲載入已打開。
如果打開了延遲載入,並且您想通過延遲載入載入導航屬性,則必須創建一個 new 的代理
Person,而不是用 實例化它new,如下所示:using (var context = new MyDbContext()) { var person = context.People.Create(); // creates a lazy loading proxy person.CompanyID = 123; context.People.Add(person); context.SaveChanges(); var company = person.Company; // lazy loading query happens here }如果沒有延遲載入,您可以使用顯式載入:
using (var context = new MyDbContext()) { var person = new Person(); person.CompanyID = 123; context.People.Add(person); context.SaveChanges(); context.Entry(person).Reference(p => p.Company).Load(); // explicit loading var company = person.Company; // no query anymore, Company is already loaded }