Требования к созданию прокси-сущностей POCO (платформа Entity Framework)
Платформа Entity Framework поддерживает классы POCO (традиционные объекты CLR). Чтобы включить отложенную загрузку сущностей POCO и отслеживание изменений в классах с помощью Entity Framework , классы POCO должны соответствовать требованиям, описанным в этом разделе. В этом случае Entity Framework сможет создать прокси-классы для сущностей POCO во время выполнения. Прокси-классы являются производными от типов POCO.
Требования к определению класса
Entity Framework создает прокси для сущностей POCO, если классы соответствуют требованиям, описанным ниже. Сущности POCO могут иметь прокси-объекты, поддерживающие отслеживание изменений или отложенную загрузку. Использование прокси-объектов для отложенной загрузке возможно и без удовлетворения требованиям, но если эти требования выполняются, то будут созданы прокси-объекты отложенной загрузки. Отложенную загрузку можно отключить, присвоив параметру LazyLoadingEnabled значение false.
Чтобы создать любой из этих прокси-объектов, необходимо выполнение следующих условий.
Пользовательский класс данных должен получить общий доступ.
Пользовательский класс данных не должен быть объявлен как sealed (NotInheritable в Visual Basic).
Пользовательский класс данных не должен быть объявлен как abstract (MustInherit в Visual Basic).
Пользовательский класс данных должен иметь конструктор public или protected без параметров. Пользуйтесь конструктором protected без параметров в том случае, если метод CreateObject должен создать прокси для сущности POCO. Вызов метода CreateObject не гарантирует создание прокси, так как класс POCO должен удовлетворять другим требованиям, перечисленным в данном разделе.
Класс не может реализовывать интерфейсы IEntityWithChangeTracker или IEntityWithRelationships, поскольку эти интерфейсы реализуются прокси-классами.
Параметр ProxyCreationEnabled должен быть установлен в значение true.
Для создания прокси отложенной загрузки должны выполняться следующие условия.
- Каждое свойство навигации должно быть объявлено как public, virtual (Overridable в Visual Basic), а не как метод доступа «get» sealed (NotOverridable в Visual Basic). Свойство навигации, определенное в пользовательском классе данных, должно иметь соответствующее свойство навигации в концептуальной модели. Дополнительные сведения см. в разделе Загрузка связанных сущностей POCO (платформа Entity Framework).
Для создания прокси, отслеживающих изменения, необходимо выполнение следующих условий.
Каждое свойство, сопоставляемое со свойством типа сущности в модели данных, должно иметь незакрытые (NotOverridable в Visual Basic), public и virtual (Overridable в Visual Basic) методы доступа «get» и «set».
Свойство навигации, представляющее конец связи «много», должно возвращать тип, реализующий интерфейс ICollection, где T является типом объекта в другом элементе связи.
Если вместе с объектом необходимо создать прокси-тип, то при создании нового объекта пользуйтесь методом CreateObject класса ObjectContext, а не оператором new.
Если во время выполнения необходимо определить, является ли сущность POCO прокси-сущностью, то следуйте шагам, описанным в разделе Как определить, является ли сущность POCO прокси-сущностью (платформа Entity Framework).
См. также
Задачи
Пошаговое руководство. Сериализация прокси-сущностей POCO с помощью WCF (платформа Entity Framework)
Основные понятия
Работа с сущностями POCO (платформа Entity Framework)
Отслеживание изменений в сущностях POCO (платформа Entity Framework)