Настройка объектов (платформа Entity Framework)
Платформа ADO.NET Entity Framework предоставляет средства для автоматического формирования уровня объектов на основе CSDL-файла модели Entity Data Model EDM. Эти классы данных можно настраивать различными способами в зависимости от требований приложения. Можно также изменять пользовательские классы данных для их работы с моделью EDM. Это полезно при обновлении классов данных существующих приложений для использования платформы Entity Framework или в случае, если необходима большая степень управления созданием классов данных.
Расширение разделяемых классов данных
Типы, определенные в модели EDM, не имеют связанных методов, подобно классам в объектно-ориентированном программировании. Они содержат только свойства, определенные в модели EDM. Можно добавить функциональность объектам, расширяя сформированные разделяемые классы данных. При формировании классов данных средствами модели Entity Data Model они реализуются в виде разделяемых классов. В разделяемом классе определение класса разбито по нескольким исходным файлам. Каждый исходный файл содержит часть определения класса, а во время компиляции приложения все части объединяются. Дополнительные сведения см. в разделах Partial (Visual Basic) и разделяемый (тип) (Справочник по C#).
Разделяемые классы можно расширять пользовательскими методами и свойствам в отдельном исходном файле, не беспокоясь о том, что пользовательские настройки будут потеряны при обновлении сформированных файлов. Дополнительные сведения см. в разделе Как настроить автоматически созданные объекты данных (платформа Entity Framework).
Пользовательская бизнес-логика
При использовании сформированных классов данных можно вызывать пользовательскую бизнес-логику во время определенных операций служб объектов, например при изменениях свойств или связей. Такая бизнес-логика может включать создание дополнительных проверок или запись в журнал при изменении свойств или вызове метода SaveChanges. Бизнес-логика реализуется с помощью обработки событий служб объектов или определения пользовательских разделяемых методов, вызываемых при изменении свойств.
Ниже представлены события и методы, которые используются для вызова пользовательской бизнес-логики.
- Onимя_свойства Разделяемые методы Changing и Onимя_свойстваChanged
Два разделяемых метода обработки сформированных классов данных, которые вызываются службами объектов при изменении свойства. Расширьте эти методы в разделяемых классах данных, чтобы реализовать код, который выполняется при изменении свойства. Дополнительные сведения см. в разделе Как выполнить бизнес-логику при изменении свойств (платформа Entity Framework).
- Событие SavingChanges
Событие, которое возникает при сохранении в источнике данных изменений, закэшированных в контексте объекта. Обработайте это событие для реализации пользовательской бизнес-логики в начале операции SaveChanges. Дополнительные сведения см. в разделе Как выполнить процедуры бизнес-логики при сохранении изменений (платформа Entity Framework).
- Метод OnContextCreated
Средства модели EDM создают разделяемый метод OnContextCreated в классе, который представляет EntityContainer для модели и унаследован от класса ObjectContext. Этот разделяемый метод вызывается при каждом создании экземпляра ObjectContext. Реализуйте в своем коде этот разделяемый метод, чтобы зарегистрировать обработчик для события SavingChanges. Дополнительные сведения см. в разделе Как выполнить процедуры бизнес-логики при сохранении изменений (платформа Entity Framework).
- Событие AssociationChanged
Событие, возникающее при изменении связи между объектами. Обработайте это событие для реализации пользовательской бизнес-логики при изменении связей. Дополнительные сведения см. в разделе Как изменить связи между объектами (платформа Entity Framework).
Пользовательские классы данных
В некоторых случаях расширение разделяемых классов путем добавления методов и свойств может оказаться недостаточно гибким решением. Рассмотрим существующее приложение платформы .NET Framework, которое использует технологию ADO.NET для передачи данных из базы данных в объекты среды CLR. Эти объекты могут содержать полезные настройки и бизнес-логику, которые нужно сохранить на уровне объектов. Такие настройки могут препятствовать миграции приложения на платформу Entity Framework. Кроме того, может потребоваться более гибкое управление типами сущностей, чем простое расширение созданных разделяемых классов.
Рекомендуемым способом применения пользовательских классов данных с моделью EDM является наследование от класса EntityObject. Если наследование от класса EntityObject невозможно или необходима более высокая степень независимости от платформы, то Entity Framework предоставляет набор интерфейсов, которые могут быть реализованы в пользовательских классах данных для работы с моделью EDM. Дополнительные сведения см. в разделе Реализация интерфейсов пользовательских классов данных (платформа Entity Framework). При использовании пользовательских классов данных необходимо применить к ним атрибуты и свойства, а также уведомлять контекст объекта при изменении свойств.
Наследование от класса EntityObject
Сформированные классы данных наследуются от класса EntityObject или ComplexObject. При использовании пользовательских классов данных с моделью EDM рекомендуется изменить их с целью наследования от одного из этих двух базовых классов. Таким образом, пользовательские классы данных получают преимущества в виде отслеживания изменений и управления связями, которые обеспечивает класс EntityObject.
При наследовании от класса EntityObject и ComplexObject следует учитывать следующее.
Имена классов и свойств должны соответствовать именам типов сущностей и свойств, определенных в CSDL-файле модели EDM. Если имена не совпадают, необходимо или изменить имена пользовательских классов данных и свойств, или обновить имена в файле на языке CSDL и связанном с ним файле, содержащем спецификации сопоставления (на языке MSL). Дополнительные сведения см. в разделе Как настроить модель EDM для работы с пользовательскими объектами (платформа Entity Framework).
Для каждого свойства типа сущности, определенного в CSDL-файле, должно существовать связанное свойство в пользовательском классе данных. Пользовательский класс данных может иметь дополнительные свойства, не сопоставленные со свойствами, описанными на языке CSDL.
К пользовательским классам данных и свойствам необходимо применить атрибуты. Эти атрибуты обеспечивают явное сопоставление объектов и языка CSDL. Дополнительные сведения см. в разделах Атрибуты сопоставления «объект — сущность» (платформа Entity Framework) и Как сопоставить пользовательские объекты с сущностями (платформа Entity Framework).
Чтобы задействовать службы объектов для отслеживания изменений пользовательского объекта, необходимо регистрировать эти изменения по конкретному шаблону с помощью методов отчетов об изменениях объекта EntityObject. Дополнительные сведения см. в разделе Отчеты об изменениях в пользовательских классах данных (платформа Entity Framework).
Средства платформы Entity Framework также формируют дополнительные классы, упрощающие объектное программирование. Этот код полезно использовать вместе с пользовательскими классами данных. Дополнительные сведения см. в разделе Как использовать службы объектов с пользовательскими объектами (платформа Entity Framework).
При наследовании от класса EntityObject сложные типы должны реализовываться наследованием от класса ComplexObject. Дополнительные сведения см. в разделе Объекты сложных типов (платформа Entity Framework).
В следующем примере определяется пользовательский класс данных Order, наследуемый от класса EntityObject:
<EdmEntityTypeAttribute(NamespaceName:="Microsoft.Samples.Edm", Name:="Order")> _
Public Class Order
Inherits EntityObject
[EdmEntityTypeAttribute(NamespaceName="Microsoft.Samples.Edm",Name="Order")]
public class Order : EntityObject
Дополнительные сведения см. в разделе Как наследовать от базовых классов EntityObject и ComplexObject (платформа Entity Framework).
В этом разделе
Атрибуты сопоставления «объект — сущность» (платформа Entity Framework)
Отчеты об изменениях в пользовательских классах данных (платформа Entity Framework)
Реализация интерфейсов пользовательских классов данных (платформа Entity Framework)
См. также
Другие ресурсы
Службы объектов (платформа Entity Framework)
Работа с пользовательскими объектами (задачи Entity Framework)