2015-04-16 3 views
0

Я начал с первого подхода базы данных с отношением между несколькими сотрудниками и отделом. Два элементарных класса были созданы инфраструктурой Entity: Department, имеющей коллекции Employee и Employee с одним объектом Department.Lazy loading Entity framework

Если бы я добавил virtual, тогда Department загрузил соответствующих сотрудников. Между двумя классами не существует отношения отношения Inhertence. оба являются TPT.

Я получил this link говоря

Ленивый нагрузка достигается за счет создания экземпляров производных типов прокси, а затем переопределение виртуальных свойств, чтобы добавить загрузочный крюк.

Как это происходит? Department не является родителем для Employee.

+1

Пожалуйста, проверьте это также http://stackoverflow.com/questions/11469432/entity-framework-code-first-lazy-loading – AmitykSharma

+2

Похоже, что добавление 'virtual' привело к ленивой загрузке, точно так же, как и к ссылке MSDN. , В чем проблема? –

+0

В моем решении Employee and Department оба являются частичными классами и показывают состав, не наследуемый. Так ли EF за сценой создал прокси-сервер как для класса, так и для реализации Inheritence, чтобы я мог получить доступ к Департаменту d = new Employee() и с d Я загружаю весь объект Employee. – AmitykSharma

ответ

1

Кажется, вы смущены тем, как прокси-сервер может это сделать.

Итак, когда вы получите employee.Department свойство нагруженного экземпляра Department, экземпляр employee не от типа Employee --instead это типа proxy class генерируемой EF и унаследованного от вашего Employee класса. Позволяет прокси-типу переопределять свойство Department из класса Employee, а метод get этого свойства запускает запрос базы данных для загрузки экземпляра отдела в память.

Однако вы также можете отключить это поведение создания прокси.

DbContext.Configuration.ProxyCreationEnabled = false; 
2

Свойства навигации каркаса Entity работают по-разному в зависимости от того, используете ли вы подход базы данных или первый код. Вот расширенный отрывок из ссылки, которую разместил:

При использовании типов POCO сущностей, отложенной загрузки достигается путем создания экземпляров производных типов прокси, а затем переопределения виртуальных свойств, чтобы добавить загрузочный крюк.

«POCO» означает «простой старый объект CLR», который представляет собой классы, которые вы создадите в кодовом подходе. Поскольку эти классы не имеют каких-либо неотъемлемых знаний EF, вы должны определить свои свойства таким образом, чтобы прокси-серверы EF могли правильно их подключать.

Поскольку вы используете базу данных сначала, классы не являются «POCO». Они наследуют базовый класс инфраструктуры сущности, который связывает свойства навигации для ленивой загрузки.

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