POCO / PROXY Отключение отложенной загрузки - PullRequest
1 голос
/ 31 июля 2011

В книге " Entity Framework 4 в действии ", в разделе 16.1.3 и снова в 16.2.4, указано

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

Однако авторы никогда не говорят, как отключить отложенную загрузку. В своих собственных поисках я слышал о ContextOptions.LazyLoadingEnabled. Это «путь» это сделано? Есть ли более одного способа (кроме отключения прокси)?

Я прочитал в одной статье , что флаг LazyLoadingEnabled относится только к объектам EntityObject, а не к объектам POCO:

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

В POCO Entity Framework по умолчанию создает прокси-классы. которые позволяют таким вещам, как ленивая загрузка, работать с POCO. Это прокси в основном создает прокси-объект, который является полной Entity Framework объект, который находится между контекстом и объектом POCO. Когда используешь POCO с WCF (или любой сериализацией) просто отключая ленивую загрузку не разрезает это. Вы должны отключить создание прокси, чтобы что ваши классы будут сериализованы правильно

Я подозреваю, что приведенный выше комментарий просто ошибочен.

1 Ответ

1 голос
/ 01 августа 2011

Да, ContextOptions.LazyLoadingEnabled - это «путь».Проблема сериализации связана, но отличается.Прокси имеют другой тип времени выполнения.Это может помешать сериализации.Единственное отношение к отложенной загрузке - это то, что чистые (не прокси) POCO не выполняют отложенную загрузку.

...