Как обновить свойства навигации объекта в 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
}
Другие вопросы по тегам