Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Entity Framework — это набор технологий в ADO.NET, которые поддерживают разработку приложений программного обеспечения, ориентированных на данные. Архитекторы и разработчики приложений, ориентированных на данные, боролись с необходимостью достичь двух очень разных целей. Они должны моделировать сущности, связи и логику решения бизнес-задач, и они также должны работать с обработчиками данных, используемыми для хранения и извлечения данных. Данные могут охватывать несколько систем хранения, каждый из которых имеет собственные протоколы; даже приложения, работающие с одной системой хранения, должны сбалансировать требования системы хранения с учетом требований к написанию эффективного и поддерживаемого кода приложения.
Entity Framework позволяет разработчикам работать с данными в виде объектов и свойств, относящихся к домену, таких как клиенты и адреса клиентов, без необходимости беспокоиться о базовых таблицах и столбцах базы данных, где хранятся эти данные. С помощью Entity Framework разработчики могут работать на более высоком уровне абстракции при работе с данными, а также создавать и поддерживать приложения, ориентированные на данные, с меньшим кодом, чем в традиционных приложениях. Так как Entity Framework является компонентом .NET Framework, приложения Entity Framework могут выполняться на любом компьютере, на котором установлена платформа .NET Framework, начиная с версии 3.5 с пакетом обновления 1 (SP1).
Предоставление жизни моделям
Длительный и распространенный подход к проектированию при создании приложения или службы — это разделение приложения или службы на три части: модель домена, логическая модель и физическая модель. Модель домена определяет сущности и связи в системе, моделироваемой. Логическая модель реляционной базы данных нормализует сущности и связи в таблицы с ограничениями внешнего ключа. Физическая модель решает возможности конкретного обработчика данных, указывая сведения о хранилище, такие как секционирование и индексирование.
Физическая модель уточнена администраторами баз данных, чтобы повысить производительность, но программисты, пишущие код приложения, в основном ограничиваются работой с логической моделью, записывая запросы SQL и вызывая хранимые процедуры. Модели предметных областей обычно используются как инструмент для фиксации и передачи требований приложения, часто в виде инертных схем, которые просматриваются и обсуждаются на ранних этапах проекта, а затем обычно остаются без использования. Многие команды разработчиков пропускают создание концептуальной модели и начинаются с указания таблиц, столбцов и ключей в реляционной базе данных.
Entity Framework обеспечивает жизнь моделям, позволяя разработчикам запрашивать сущности и связи в модели предметной области (называемой концептуальной моделью в Entity Framework), опираясь на Entity Framework для перевода этих операций в команды источника данных. Это освобождает приложения от жестко закодированных зависимостей от определенного источника данных.
При работе с Code First концептуальная модель отображается на модель хранилища в коде. Entity Framework может выводить концептуальную модель на основе типов объектов и дополнительных конфигураций, которые вы определяете. Метаданные сопоставления создаются в процессе выполнения на основе сочетания того, как вы определили типы доменов, и дополнительной конфигурационной информации, предоставляемой в коде. Entity Framework создает базу данных по мере необходимости на основе метаданных. Дополнительные сведения см. в разделе "Создание модели".
При работе с инструментами модели данных сущностей концептуальная модель, модель хранения и сопоставления между ними выражаются в схемах на основе XML и определяются в файлах с соответствующими расширениями имен:
Язык определения концептуальной схемы (CSDL) определяет концептуальную модель. CSDL — это реализация Entity Framework модели данных сущностей. Расширение файла — CSDL.
Язык определения схемы хранилища (SSDL) определяет модель хранения, которая также называется логической моделью. Расширение файла — SSDL.
Язык спецификации сопоставления (MSL) определяет сопоставления между хранилищем и концептуальными моделями. Расширение файла — MSL.
Модель хранения и сопоставления могут изменяться по мере необходимости, не требуя изменений в концептуальной модели, классах данных или коде приложения. Так как модели хранения зависят от поставщика, вы можете работать с согласованной концептуальной моделью в различных источниках данных.
Entity Framework использует эти файлы модели и сопоставления для создания, чтения, обновления и удаления операций с сущностями и связями в концептуальной модели с эквивалентными операциями в источнике данных. Entity Framework даже поддерживает сопоставление сущностей в концептуальной модели с хранимыми процедурами в источнике данных. Дополнительные сведения см. в спецификациях CSDL, SSDL и MSL.
Сопоставление объектов с данными
Объектно-ориентированное программирование представляет проблему взаимодействия с системами хранения данных. Хотя организация классов часто зеркально отражает организацию реляционных таблиц баз данных, подход не является идеальным. Несколько нормализованных таблиц часто соответствуют одному классу, а связи между классами часто представляются по-разному, чем связи между таблицами. Например, чтобы представить клиента для заказа на продажу, Order
класс может использовать свойство, содержащее ссылку на экземпляр класса, а Customer
строка таблицы в базе данных содержит столбец внешнего ключа (или набор столбцов) со значением, соответствующим значению первичного Order
ключа в Customer
таблице. Класс Customer
может иметь свойство с именем Orders
, которое содержит коллекцию экземпляров Order
класса, а Customer
таблица в базе данных не имеет сравнимого столбца. Entity Framework предоставляет разработчикам гибкость в представлении связей таким образом, или более тесно моделировать связи, как они представлены в базе данных.
Существующие решения пытались преодолеть этот разрыв, который часто называют "импедансным несоответствием", путем сопоставления объектно-ориентированных классов и свойств только с реляционными таблицами и столбцами. Вместо того чтобы использовать этот традиционный подход, Entity Framework сопоставляет реляционные таблицы, столбцы и ограничения внешнего ключа в логических моделях с сущностями и связями в концептуальных моделях. Это обеспечивает большую гибкость как в определении объектов, так и в оптимизации логической модели. Средства модели данных сущности создают расширяемые классы данных на основе концептуальной модели. Эти классы являются частичными классами, которые можно расширить с дополнительными элементами, которые добавляет разработчик. По умолчанию классы, созданные для конкретной концептуальной модели, являются производными от базовых классов, которые предоставляют службы для материализации сущностей в качестве объектов, а также для отслеживания и сохранения изменений. Разработчики могут использовать эти классы для работы с сущностями и связями в качестве объектов, связанных с сопоставлениями. Разработчики также могут настраивать классы, созданные для концептуальной модели. Дополнительные сведения см. в разделе "Работа с объектами".
Доступ и изменение данных сущности
Более чем просто другое решение сопоставления с реляционными объектами, Entity Framework в основном позволяет приложениям получать доступ к данным и изменять их, представленные как сущности и связи в концептуальной модели. Entity Framework использует сведения в модели и файлах сопоставления для преобразования запросов объектов к типам сущностей, представленным в концептуальной модели, в запросы, относящиеся к источнику данных. Результаты запроса материализуются в объекты, которым управляет Entity Framework. Entity Framework предоставляет следующие способы запроса концептуальной модели и возвращать объекты:
LINQ to Entities. Предоставляет поддержку Language-Integrated query (LINQ) для запросов типов сущностей, определенных в концептуальной модели. Дополнительные сведения см. в разделе LINQ to Entities.
Entity SQL. Диалект SQL, независимый от хранилища, который работает непосредственно с сущностями в концептуальной модели и поддерживает концепции модели данных в Entity Framework. Entity SQL используется как с запросами объектов, так и с запросами, выполняемыми с помощью поставщика EntityClient. Дополнительные сведения см. в обзоре Entity SQL.
Entity Framework включает поставщик данных EntityClient. Этот поставщик управляет подключениями, преобразует запросы сущностей в запросы, относящиеся к источнику данных, и возвращает средство чтения данных, используемое Entity Framework для материализации данных сущностей в объекты. Если материализация объектов не требуется, поставщик EntityClient также может использоваться как стандартный поставщик данных ADO.NET, позволяя приложениям выполнять запросы Entity SQL и использовать возвращаемый ридер данных только для чтения. Дополнительные сведения см. в разделе EntityClient Provider для Entity Framework.
На следующей схеме показана архитектура Entity Framework для доступа к данным:
Средства модели сущностей могут создавать класс, производный от System.Data.Objects.ObjectContext
или System.Data.Entity.DbContext
представляющий контейнер сущностей в концептуальной модели. Этот контекст объекта предоставляет средства для отслеживания изменений и управления идентификацией, согласованностью и связями. Этот класс также предоставляет SaveChanges
метод, который записывает вставки, обновления и удаления в источник данных. Как и запросы, эти изменения выполняются автоматически командами, созданными системой или хранимыми процедурами, указанными разработчиком.
Поставщики данных
Поставщик EntityClient
расширяет модель поставщика ADO.NET путем доступа к данным с точки зрения концептуальных сущностей и связей. Он выполняет запросы, использующие Entity SQL. Entity SQL предоставляет базовый язык запросов, позволяющий EntityClient
взаимодействовать с базой данных. Дополнительные сведения см. в разделе EntityClient Provider для Entity Framework.
Entity Framework включает обновленный поставщик данных SqlClient, поддерживающий канонические деревья команд. Дополнительные сведения см. в разделе SqlClient для Entity Framework.
Инструменты информационной модели сущностей
Вместе с средой выполнения Entity Framework Visual Studio включает средства сопоставления и моделирования. Дополнительные сведения см. в разделе "Моделирование и сопоставление".
Подробнее
Дополнительные сведения о Entity Framework см. в следующих статье:
Приступая к работе . Предоставляет сведения о том, как быстро приступить к работе с помощью краткого руководства, в котором показано, как создать простое приложение Entity Framework.
Терминология Entity Framework . Определяет множество терминов, представленных моделью данных сущности и платформой Entity Framework, и которые используются в документации Entity Framework.
Ресурсы Entity Framework . Содержит ссылки на концептуальные разделы и ссылки на внешние разделы и ресурсы для создания приложений Entity Framework.