Требования к созданию прокси-сущностей 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)