Подтвердить что ты не робот

EF 4 - ленивая загрузка без прокси

Я прочитал, что прокси используются, когда нужно использовать Lazy Loading and Change Tracking. Другими словами, для использования Lazy Loading я должен включить прокси.

Пока все хорошо.

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

ctx = new SchoolEntities();
ctx.ContextOptions.ProxyCreationEnabled = false;
ctx.ContextOptions.LazyLoadingEnabled = true;

Является ли свойство ProxyCreationEnabled связанным только с изменением прокси-сервера отслеживания или я что-то не хватает?

Может кто-нибудь объяснить это с некоторыми деталями?

Спасибо!

EDIT1

Я не использую POCO/DbContext. Я использую регулярную EDMX EF-модель с ObjectContext. Я знаю, что важность доверенных лиц для компаний POCO касается изменения отслеживания и ленивой загрузки. Зачем использовать Proxies в обычной модели EDMX?

4b9b3361

Ответ 1

При использовании объектов POCO со встроенными функциями Entity Framework создание прокси должно быть включено для использования ленивой загрузки. Итак, с объектами POCO, если ProxyCreationEnabled является ложным, тогда ленивая загрузка не произойдет, даже если для LazyLoadingEnabled установлено значение true.

С определенными типами устаревших объектов (в частности, из EntityObject) это не так, и ленивая загрузка будет работать, даже если для ProxyCreationEnabled установлено значение false. Но не думайте, что вы должны использовать EntityObject-сущности - это вызовет у вас боль.

Флаг ProxyCreationEnabled обычно имеет значение false, если вы хотите, чтобы EF никогда не создавал прокси-сервер, возможно потому, что это вызовет проблемы для типа сериализации, который вы делаете.

Флаг LazyLoadingEnabled обычно используется для контроля того, выполняется ли ленивая загрузка в контекстно-зависимом контексте, как только вы решите, что прокси-серверы в порядке. Так, например, вы можете использовать прокси для отслеживания изменений, но отключите ленивую загрузку.