Поделиться через


Работа с объектами (платформа Entity Framework)

Платформа Entity Framework позволяет запрашивать, вставлять, обновлять и удалять данные, представленные как типизированные объекты CLR, которые являются экземплярами типов сущности. Типы сущности представляют сущности, определенные в концептуальной модели. Платформа Entity Framework сопоставляет сущности и связи, которые определены в концептуальной модели, с источником данных. Платформа Entity Framework предоставляет средства для выполнения следующего: материализации в виде объектов данных, возвращенных из источника данных; отслеживания изменений, внесенных в объекты; обработки параллелизма; распространения изменений в объектах в источник данных; привязки объектов к элементам управления. Можно использовать LINQ to Entities, Язык Entity SQL или Методы построителя запросов (платформа Entity Framework) для выполнения запросов к концептуальной модели. Дополнительные сведения см. в разделе Выполнение запроса к концептуальной модели (платформа Entity Framework).

Класс ObjectContext является основным классом для взаимодействия с объектами сущности. Экземпляр класса ObjectContext инкапсулирует следующее: соединение с базой данных; метаданные, которые описывают модель; объект ObjectStateManager, который отслеживает объекты во время выполнения операций создания, обновления и удаления. Дополнительные сведения см. в разделе Разрешение идентификаторов, управление состоянием и отслеживание изменений (платформа Entity Framework).

Платформа Entity Framework предоставляет средства автоматического формирования объектного уровня на основе концептуальной модели. Объектный уровень включает определения типов сущности и контекста объекта. Определение контекста объекта содержит производный класс ObjectContext, который, как правило, имеет набор свойств, возвращающий коллекцию сущностей указанного типа. Для создания кода объектного уровня используется Entity Data Model Designer (конструктор сущностей) или средство командной строки EdmGen.exe. Дополнительные сведения см. в разделе Generated Code Overview.

Типы сущности

Платформа Entity Framework позволяет работать с типами сущности, которые происходят от объектов EntityObject, традиционными типами объектов среды CLR (POCO), прокси-типами POCO и типами сущностей с самостоятельным отслеживанием. В следующих разделах представлены сведения, которые помогут выбрать наиболее подходящий вариант с учетом характерных особенностей конкретного приложения.

EntityObject

По умолчанию средства ADO.NET модель EDM (сущностная модель данных) создают производные типы сущности EntityObject. При работе с производными типами EntityObject контекст объекта управляет связями между объектами, отслеживает изменения по мере их возникновения и поддерживает отложенную загрузку наиболее эффективным способом. Однако производные типы EntityObject имеют существенную зависимость от Entity Framework . Если вы работаете с архитектурой, которая требует пропуска сохраняемости (например, проводя разработку на основе результатов тестирования или разработку с учетом прикладной области), или располагаете существующими доменными классами, рассмотрите возможность использовать POCO или прокси-типов POCO.

POCO

Платформа Entity Framework позволяет использовать существующие объекты домена вместе с моделью данных, не внося никаких изменений в классы данных. Эти классы данных POCO (называемые также объектами, пропускающими сохраняемость) поддерживают в основном такие же способы запроса, вставки, обновления и удаления, что и типы сущности, которые созданы средствами модель EDM (сущностная модель данных) .

При работе с типами POCO изменения, вносимые в граф объектов, не отслеживаются Entity Framework автоматически по мере их появления. Для обнаружения изменений в объектах платформа Entity Framework использует механизм моментальных снимков. Вызовите метод DetectChanges, чтобы синхронизировать контекст объекта с графом. По умолчанию контекст объекта вызывает этот метод перед сохранением данных в источнике данных. Для работы этого механизма требуется больше памяти по сравнению с механизмом мгновенного уведомления, что может оказать отрицательное влияние на производительность приложения, особенно если оно требует частого обнаружения изменений. Дополнительные сведения см. в разделе Отслеживание изменений в сущностях POCO (платформа Entity Framework). Чтобы получить поддержку мгновенных уведомлений, включите создание прокси-объектов отслеживания изменений.

Если требуется воспользоваться отложенной загрузкой, необходимо включить создание прокси отложенной загрузки. Дополнительные сведения см. в приведенном далее разделе с описанием прокси POCO.

Прокси POCO

Используйте прокси POCO, если необходимо обеспечить весьма эффективное и мгновенное отслеживание изменений и отложенную загрузку. При использовании прокси обеспечиваются те же функциональные возможности, что и при использовании производных типов EntityObject, вместе с тем классы доменов остаются отделенными от Entity Framework . Чтобы включать прокси отложенной загрузки и/или обеспечить создание прокси мгновенного отслеживания изменений, применяемые классы POCO должны соответствовать требованиям, описанным в разделе Требования к созданию прокси-сущностей POCO (платформа Entity Framework).

Прокси создаются во время выполнения и наследуют от типов POCO. Это означает, что тип среды выполнения применяемых сущностей отличается от типа POCO. Это приводит к возникновению определенных сложностей, связанных с сериализацией. Дополнительные сведения см. в разделе Работа с сущностями POCO (платформа Entity Framework). Следует отметить, что создание прокси-типов характеризуется некоторыми издержками по сравнению с типами POCO.

Сущности с самостоятельным отслеживанием

Производные типы EntityObject , POCO и прокси-типы POCO хорошо работают в приложениях, в которых объекты сущности можно присоединять к контексту объекта, осуществляющему отслеживание изменений. Однако, если необходимо передать полные графы сущностей на уровень, где контекст объекта недоступен, необходимо принять решение о том, как отслеживать изменения и передавать сведения об этих изменениях обратно в контекст объекта. Начиная с .NET Framework версии 4, сущности с самостоятельным отслеживанием могут записывать изменения в скалярных и комплексных свойствах, а также в свойствах навигации. Сущности с самостоятельным отслеживанием не зависят от платформы Entity Framework . Шаблон Генератор сущностей с самостоятельным отслеживанием ADO.NET создает сущности с самостоятельным отслеживанием. Дополнительные сведения см. в разделе Работа с сущностями с самостоятельным отслеживанием.

Замечания о производительности

Далее приведены дополнительные сведения о производительности, которые могут также помочь выбрать типы объектов, наиболее подходящие для конкретного приложения.

  • При загрузке метаданных стоимость обнаружения POCO или прокси-типов больше по сравнению с обнаружением производных типов EntityObject, обозначенных атрибутом.

  • Определенные издержки связаны с созданием динамических прокси-типов POCO.

  • Инициализация типов POCO требует наименьших издержек по сравнению с прокси и производными типами EntityObject.

  • Отслеживание моментального снимка POCO является более дорогостоящим, чем отслеживание мгновенных уведомлений.

В этом разделе

Объекты сложных типов (платформа Entity Framework)

Определение отношений и управление отношениями (платформа Entity Framework)

Создание, добавление, изменение и удаление объектов (платформа Entity Framework)

Присоединение и отсоединение объектов (платформа Entity Framework)

Разрешение идентификаторов, управление состоянием и отслеживание изменений (платформа Entity Framework)

Управление соединениями и транзакциями (платформа Entity Framework)

Сохранение изменений и управление параллелизмом (платформа Entity Framework)

Привязка объектов к элементам управления (платформа Entity Framework)

Работа с ключами сущностей (платформа Entity Framework)

Сериализация объектов (платформа Entity Framework)

Работа с ObjectSet (платформа Entity Framework)

Настройка объектов (платформа Entity Framework)

См. также

Основные понятия

Выполнение запроса к концептуальной модели (платформа Entity Framework)
Краткое руководство (платформа Entity Framework)