Entity Framework - Code First не загружает указанный объект - PullRequest
6 голосов
/ 22 марта 2011

У меня есть два простых класса, сгенерированных первым кодом.

public class Company
{
    public int Id { get; set; }
    public string Name { get; set; }
    public virtual Address Address { get; set; }
}

public class Address
{
    public int Id { get; set; }
    public string Country { get; set; }
    ...
}

После сохранения компании в базе данных у меня есть компания (Id = 1 | name = "blah" | AddressId = 1) и ее адрес (Id= 1, Страна = "Польша").Когда я пытаюсь загрузить из моего DbContext:

Company company = context.Companies.Find(id);

, я получаю компанию с нулевым свойством Address.Что я делаю не так?

(я использую CTP5.)

1 Ответ

5 голосов
/ 22 марта 2011

попробуйте это:

Company company = context.Companies.Include("Address").Find(id);

или с новым набранным синтаксисом:

Company company = context.Companies.Include(c => c.Address).Find(id);

Это говорит EF с нетерпением загружать Address сущность как часть вашей Company сущности.

Также кажется, что у вас есть слой хранилища поверх EF - убедитесь, что ваша реализация хранилища поддерживает Include(), если это так.

Просто для начала, это реализация * 1014.* что Джулия Лерман предоставляет в «Programming Entity Framework» для поддержки тестового шаблона репозитория с модульным тестированием в POCOS (эта версия работает только с первым синтаксисом):

public static IQueryable<TSource> Include<TSource>(this IQueryable<TSource> source, string path)
{
    var objectQuery = source as ObjectQuery<TSource>;
    if (objectQuery != null)
    {
        return objectQuery.Include(path);
    }
    return source;
}
...