2014-10-01 4 views
0

Это мой второй день с EntityFramework и у меня есть еще одна проблема:Загрузка связанные объекты с Entity Framework 6

Я спасаю своего рода конфигурации в моей базе данных. Это хорошо работает: Это мой класс:

public class Configuration : IConfiguration 
{.... 
    public ICollection<EmailClassificationPattern> emailClassificationPatterns { get; set; } 
    ... 
} 

Я получаю две таблицы dbo.Configurations и dbo.EmailClassificationPattern с. dbo.EmailClassificationPattern s имеет 4 записи, и каждая ссылка правильно соответствует dbo.Configurations через поле под названием Configuration_ID.

Я загрузка конфигурации следующим образом:

var configuration = (Configuration)mycontext.Configurations.Where(x => 
    x.configurationName=="Default").FirstOrDefault(); 

Тогда я пытаюсь получить доступ к emailClassificationPatterns членов это было:

var relevantSubjectList = configuration.emailClassificationPatterns. 
      Select(x => x.subjectPatternForMailCollection); 

Но я получаю ReferenceNullException потому emailClassificationPatterns является NULL. Почему структура привязки не загружает ссылочных членов? У меня нет возможности включить ссылочный элемент, как IntelliSense не обеспечивает .Inlcude() (как это :)

var configuration = (Configuration)mycontext.Configurations.Where(x => 
     x.configurationName=="Default").Include("emailClassificationPattern") 

ли я ИМЕЕМ, чтобы позволить eagerLoading? Если да - как? Есть ли другой способ доступа к ссылочным членам и есть ли какая-то лучшая практика?

С наилучшими пожеланиями

Sebastian

ответ

1

Include заявление предшествует Where. Это загрузит дочерние объекты. Например:

var configuration = Configuration)mycontext.Configurations.Include("emailClassificationPattern").Where(x => 
     x.configurationName=="Default") 
+0

Есть ли еще одна возможность, когда я не должен указывать, какой класс Child-Memeber-Class также должен быть загружен? Я бы ожидал, что EF узнает, какие дочерние элементы необходимы (на основе кода) и динамически загружает этот элемент ... – sebastian87

+0

Нет. Вы должны явно загрузить их. он также довольно умен, потому что в огромных реляционных базах данных может быть множество связанных дочерних (дочерних и дочерних) объектов. –

+0

Но ... то, что вы также можете сделать, это просто загрузить объекты конфигурации, и когда вы перечислите некоторые дочерние объекты конфигурации, они будут загружаться по требованию (точно в срок), если я его правильно помню. Google - ваш друг! Много документации о (нетерпеливой) загрузке в EF;) –

Смежные вопросы