Обзор Entity Framework
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 создает базу данных по мере необходимости на основе метаданных. Дополнительные сведения см. в разделе Создание модели.
При работе со средствами работы с моделью EDM концептуальная модель, модель хранения и сопоставление между ними выражены в схемах на основе 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 предоставляет разработчикам гибкость в представлении связей таким образом, или более тесно моделировать связи, как они представлены в базе данных.
В существующих решениях была предпринята попытка устранить этот разрыв, часто называемый «несоответствием типов данных» (impedance mismatch), путем сопоставления с реляционными таблицами и столбцами только объектно-ориентированных классов и свойств. Вместо того чтобы использовать этот традиционный подход, Entity Framework сопоставляет реляционные таблицы, столбцы и ограничения внешнего ключа в логических моделях с сущностями и связями в концептуальных моделях. Это позволяет достичь большей гибкости при определении объектов и оптимизации логической модели. Средства модели данных сущности создают расширяемые классы данных на основе концептуальной модели. Эти классы являются разделяемыми классами, которые могут быть расширены с помощью дополнительных членов, добавленных разработчиком. По умолчанию классы, сформированные для определенной концептуальной модели, являются производными от базовых классов, предоставляющих службы для материализации сущностей в виде объектов, а также для отслеживания и сохранения изменений. Разработчики могут использовать эти три класса для работы с сущностями и связями как с объектами, относящимися к ассоциациям. Разработчики смогут также настраивать классы, сформированные для концептуальной модели. Дополнительные сведения см. в разделе "Работа с объектами".
Доступ и изменение данных сущности
Платформа Entity Framework — это не просто еще одно средство объектно-реляционного сопоставления. Ее цель — предоставить приложениям возможность чтения и изменения данных, представленных в виде сущностей и связей в концептуальной модели. Entity Framework использует сведения в модели и файлах сопоставления для преобразования запросов объектов к типам сущностей, представленным в концептуальной модели, в запросы, относящиеся к источнику данных. Результаты запроса материализуются в объекты, которым управляет Entity Framework. Entity Framework предоставляет следующие способы запроса концептуальной модели и возвращать объекты:
LINQ to Entities. Предоставляет LINQ-службу поддержки запросов на языке для запросов типов сущностей, определенных в концептуальной модели. Дополнительные сведения см. в разделе LINQ to Entities.
Entity SQL. Независимо от хранилища диалект SQL, который работает непосредственно с сущностями в концептуальной модели и поддерживает концепции модели данных сущностей. 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.