Как обновить свойства навигации объекта в Entity Framework
В ASP .NET MVC 3 с Entity Framework у меня есть объект домена, у которого есть свойство навигации, ссылающееся на другие объекты, а именно:
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, поскольку свойство навигации никогда не обновлялось.
Есть ли способ обновить свойство навигации тем, что существует в базе данных?
Ленивая загрузка включена.
1 ответ
Если отложенная загрузка включена и вы хотите загрузить свойство навигации с отложенной загрузкой, вы должны создать прокси нового 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
}