Ленивая загрузка у меня не работает в Entity Framework 4 - PullRequest
1 голос
/ 05 июля 2011

Я пытаюсь включить отложенную загрузку в контексте EF4.

Код, который пытается загрузить данные:

using (IUnitOfWork uw = new EFUnitOfWork())
{
    foreach (Document doc in uw.Documents.All)
    {        
        Console.WriteLine("Name: {0} Description: {1} Category: {2}", doc.Name, doc.Description, doc.DocumentCategory.Name);
    }
}

Я экспериментирую с шаблонами Repository и Unit Of Work, но, насколько я понимаю, приведенная ниже команда должна работать.

ctx.ContextOptions.LazyLoadingEnabled = true;

У меня проблема при доступе к doc.DocumentCategory.Name, я получаю исключение NullReferenceException.

Почему эти данные не загружаются лениво?

Если у меня загружены DocumentCategories, свойство DocumentCategory разрешается.

Класс «Мой документ» определяется следующим образом:

public class Document
{
    public Document()
    {

    }

    public Document(int id)
    {
        Id = id;
    }

    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    public virtual string Description { get; set; }
    public virtual int DocumentCategoryId { get; set; }
    public virtual bool Deleted { get; set; }
    public DocumentCategory DocumentCategory { get; set; }

    public override string ToString()
    {
        return Name;
    }
}

Ответы [ 2 ]

3 голосов
/ 05 июля 2011

Свойство DocumentCategory также необходимо пометить как виртуальное, чтобы поддерживать отложенную загрузку.Посмотрите на http://msdn.microsoft.com/en-us/library/dd468057.aspx

2 голосов
/ 05 июля 2011

Document.DocumentCategory объявлен как виртуальный?EF требует этого, чтобы сгенерировать тип прокси, который фактически будет выполнять отложенную загрузку при доступе к свойству.(В противном случае EF не знает, когда вы обращаетесь к значению свойства)

Кроме того, если DocumentCategory уже является виртуальной, могут существовать другие свойства, которые не позволяют EF генерировать прокси-тип.Осмотрите экземпляр «Document» с помощью отладчика, чтобы увидеть, является ли он на самом деле прокси-типом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...