Создание прокси-сервера Entity Framework

Мы можем остановить создание прокси в конструкторе контекста, используя

this.Configuration.ProxyCreationEnabled = false;

В чем преимущества и недостатки создания прокси в EF 4.1?

Ответы

Ответ 1

Прокси нужны для двух функций:

  • Lazy loading - свойства навигации загружаются после первого доступа
  • Динамическое отслеживание изменений - если вы изменяете какое-либо свойство в сущности, контекст уведомляется об этом изменении и устанавливает состояние объекта. Если отслеживание динамических изменений не используется, контекст должен использовать отслеживание изменений моментальных снимков, что означает обнаружение всех изменений перед сохранением = поиск всех свойств, даже если они не были изменены.

Оба эти метода имеют другие требования:

  • Lazy loading - все свойства навигации в сущности должны быть virtual. Должна быть включена ленивая загрузка.
  • Динамическое отслеживание изменений - все отображаемые свойства должны быть virtual.

Ответ 2

В дополнение к предыдущему ответу, Runtime использует ваш класс POCO с помощью отражения и создает класс Dynamic Proxy, наследующий ваш класс POCO. Таким образом, он добавит эти функциональные возможности + функции EntityObject во время выполнения, что поможет динамическим прокси-серверам включить Lazy Loading и Dynamic change Tracking.