Мы можем остановить создание прокси в конструкторе контекста, используя
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.