Знакомство с платформой Entity Framework
Платформа Entity Framework представляет собой набор технологий ADO.NET, обеспечивающих разработку приложений, связанных с обработкой данных. Архитекторам и разработчикам приложений, ориентированных на обработку данных, приходится учитывать необходимость достижения двух совершенно различных целей. Они должны моделировать сущности, связи и логику решаемых бизнес-задач, а также работать с ядрами СУБД, используемыми для сохранения и получения данных. Данные могут распределяться по нескольким системам хранения данных, в каждой из которых применяются свои протоколы, но даже в приложениях, работающих с одной системой хранения данных, необходимо поддерживать баланс между требованиями системы хранения данных и требованиями написания эффективного и удобного для обслуживания кода приложения.
В Entity Framework разработчики получают возможность работать с данными, представленными в форме относящихся к конкретным доменам объектов и свойств, таких как клиенты и их адреса, не будучи вынужденными обращаться к базовым таблицам и столбцам базы данных, где хранятся эти данные. Такая возможность появляется благодаря переходу на более высокий уровень абстракции, на котором разработчики могут работать с данными, применяя меньший объем кода для создания и сопровождения приложений, ориентированных на работу с данными. Платформа Entity Framework является компонентом .NET Framework, поэтому приложения Entity Framework можно запускать на любом компьютере, на котором установлен .NET Framework 3.5 с пакетом обновления 1 (SP1).
Применение концептуальных моделей на практике
Давно известный и широко применяемый принцип проектирования в моделировании данных состоит в разделении модели данных на следующие три части: концептуальная модель, логическая модель и физическая модель. Концептуальная модель определяет сущности и связи в моделируемой системе. Логическая модель для реляционной базы данных обеспечивает нормализацию сущностей и связей в целях создания таблиц с ограничениями внешнего ключа. В физической модели учитываются возможности конкретной системы обработки данных путем определения зависящих от ядра базы данных подробных сведений о хранении данных, которые касаются секционирования и индексирование.
Физическая модель совершенствуется администраторами базы данных в целях повышения производительности, но программисты, которые разрабатывают код приложения, в основном вынуждены ограничиваться работой с логической моделью, подготавливая SQL-запросы и вызывая хранимые процедуры. Концептуальные модели в основном используются как инструмент для представления и обмена мнениями по поводу требований к приложению, поэтому чаще всего служат в качестве почти неизменных схем, которые рассматриваются и обсуждаются на ранних стадиях проекта, после чего перестают быть предметом внимания. Во многих коллективах разработчиков принято пропускать этап создания концептуальной модели и начинать с определения таблиц, столбцов и ключей в реляционной базе данных.
Платформа Entity Framework придает значимость концептуальным моделям, позволяя разработчикам выполнять запросы к сущностям и связям в концептуальной модели; при этом для перевода этих операций в команды, зависящие от источника данных, применяется сама платформа Entity Framework. Это позволяет отказаться от применения в приложениях жестко заданных зависимостей от конкретного источника данных. Концептуальная модель, модель хранения и их сопоставление выражаются во внешней спецификации, известной также как модель Entity Data Model (EDM). Модель хранения и сопоставление могут изменяться по мере необходимости, не требуя изменений в концептуальной модели, классах данных и коде приложения. Модели хранения зависят от поставщика, поэтому можно работать с согласованной концептуальной моделью через различные источники данных.
Модель EDM определяется следующими тремя файлами модели и сопоставления, которые имеют соответствующие расширения имен файлов.
Файл на языке CSDL (с расширением CSDL) определяет концептуальную модель.
Файл на языке SSDL (с расширением SSDL). Определяет модель хранения данных, которая называется также логической моделью.
Файл на языке MSL (с расширением MSL) определяет сопоставление модели хранения и концептуальной модели.
В Entity Framework эти файлы модели и сопоставления на основе XML используются для преобразования операций создания, чтения, обновления и удаления, выполняемых над сущностями и связями концептуальной модели, в эквивалентные операции в источнике данных. Модель EDM поддерживает даже сопоставление сущностей в концептуальной модели с хранимыми процедурами в источнике данных. Дополнительные сведения см. в разделе Моделирование данных на платформе Entity Framework.
Сопоставление объектов и данных
При использовании объектно-ориентированного программирования для взаимодействия с системами хранения данных возникают сложности. Безусловно, организация классов часто напоминает организацию таблиц реляционной базы данных, но такое соответствие не идеально. Несколько нормализованных таблиц часто соответствуют единственному классу, а связи между классами представлены иначе, чем связи между таблицами. Например, для представления клиенту заказа на продажу в классе Order используется свойство, содержащее ссылку на экземпляр класса Customer, но строка таблицы Order базы данных содержит столбец внешнего ключа (или набор столбцов) со значением, которое соответствует первичному ключу в таблице Customer. Класс Customer может включать свойство с именем Orders, содержащее коллекцию экземпляров класса Order, но таблица Customer базы данных не содержит сравнимого столбца.
В существующих решениях была предпринята попытка устранить этот разрыв, часто называемый «несоответствием типов данных» (impedance mismatch), путем сопоставления с реляционными таблицами и столбцами только объектно-ориентированных классов и свойств. Вместо данного традиционного подхода в Entity Framework реляционные таблицы, столбцы и ограничения внешнего ключа логических моделей преобразуются в сущности и связи концептуальных моделей. Это позволяет достичь большей гибкости при определении объектов и оптимизации логической модели. С помощью инструментов Entity Data Model формируются расширяемые классы данных, основанные на концептуальной модели. Эти классы являются разделяемыми классами, которые могут быть расширены с помощью дополнительных членов, добавленных разработчиком. Классы, сформированные для определенной концептуальной модели, являются производными от базовых классов, предоставляющих службы объектов для материализации сущностей в виде объектов, а также для отслеживания и сохранения изменений. Разработчики могут использовать эти три класса для работы с сущностями и связями как с объектами, связанными свойствами навигации. Дополнительные сведения о службах объектов см. в разделе Общие сведения о службах объектов (платформа Entity Framework).
Доступ к данным сущностей и их изменение
Платформа Entity Framework — это не просто еще одно средство объектно-реляционного сопоставления. Ее цель — предоставить приложениям возможность чтения и изменения данных, представленных в виде сущностей и связей в концептуальной модели. В службах объектов используется модель EDM для преобразования запросов объектов к типам сущностей, представленным в концептуальной модели, в запросы, зависящие от источника данных. Результаты запросов преобразуются в объекты, которыми управляют службы объектов. Платформа Entity Framework предоставляет следующие способы выполнения запросов к модели EDM и возврата объектов.
LINQ to Entities. Осуществляет поддержку LINQ для выполнения запросов к типам сущностей, которые определены в концептуальной модели. Дополнительные сведения см. в разделе Общие сведения о технологии LINQ to Entities.
Entity SQL — это не зависящий от типа хранилища диалект SQL, который работает непосредственно с сущностями концептуальной модели и поддерживает такие функции модели EDM, как наследование и связи. Язык Entity SQL используется как с объектными запросами, так и с запросами, исполняемыми при помощи поставщика EntityClient. Дополнительные сведения см. в разделе Общие сведения о языке Entity SQL.
Методы построителя запросов. Позволяют создавать запросы Entity SQL, используя методы запросов в стиле LINQ. Дополнительные сведения см. в разделе Методы построителя запросов (платформа Entity Framework).
Платформа Entity Framework включает в себя поставщик данных EntityClient. Поставщик управляет соединениями, переводит запросы сущностей в запросы, зависящие от источника данных, и возвращает модуль чтения данных, который используется службами объектов для материализации данных сущности в виде объектов. Если материализация объектов не требуется, поставщик EntityClient может также использоваться как стандартный поставщик данных ADO.NET, который позволяет приложениям выполнять запросы Entity SQL и получать предназначенные только для чтения данные, возвращаемые модулем чтения данных. Дополнительные сведения см. в разделе Поставщик EntityClient для платформы Entity Framework.
На следующей схеме показана архитектура, применяемая на платформе Entity Framework для доступа к данным.
В Entity Framework создается класс, производный от ObjectContext, который представляет контейнер сущностей, определенный в концептуальной модели. Контекст объекта предоставляет средства для отслеживания изменений и управления идентификаторами, параллелизмом и связями. Этот класс представляет также доступ к методу SaveChanges, который записывает результаты вставки, обновления и удаления данных в источник данных. Подобно запросам, эти изменения производятся либо командами, автоматически сформированными системой, либо хранимыми процедурами, указанными разработчиком. Дополнительные сведения см. в разделе Добавление, изменение и удаление объектов (платформа Entity Framework).
Средства работы с моделью EDM
Наряду со средой выполнения Entity Framework, .NET Framework 3.5 с пакетом обновления 1 включает генератор моделей EDM (EdmGen.exe). Программа командной строки соединяется с источником данных и формирует модель EDM на основе сопоставления типа «один к одному» между сущностями и таблицами. В этой программе используется также файл концептуальной модели (с расширением CSDL) для формирования файла уровня объектов, содержащего классы, которые представляют типы сущностей и контекст ObjectContext. Дополнительные сведения см. в разделе Генератор модели EDM (EdmGen.exe).
Visual Studio 2008 включает в себя обширный набор поддерживаемых инструментов для создания и обслуживания модели EDM в приложении Visual Studio. Конструктор Entity Data Model поддерживает создание усовершенствованных сценариев сопоставления (таких как наследование типа «одна таблица на тип» и «одна таблица на иерархию»), а также разделение сущностей, которые сопоставлены с несколькими таблицами. Дополнительные сведения см. в разделе Общие сведения о конструкторе моделей EDM ADO.NET.
Получение дополнительных сведений
В следующих разделах приводятся подробные сведения о службах Entity Framework.
- Приступая к работе (Entity Framework)
Содержит сведения о подготовке и быстром запуске при помощи руководства Краткое руководство (платформа Entity Framework), в котором показано, как создать простое приложение Entity Framework.
- Краткое руководство (платформа Entity Framework)
Показывает, как использовать инструменты Entity Data Model в сочетании с Visual Studio 2008 для быстрого создания первого приложения Entity Framework.
- Сценарии приложений [платформа Entity Framework]
Содержит основанные на задачах ссылки на разделы, соответствующие конкретным сценариям приложений, таким как написание запросов, привязка объектов к элементам управления данными или реализация бизнес-логики.
- Компоненты платформы Entity Framework
Содержит более подробные сведения о функциях создания Entity Framework и ссылки на разделы, в которых обсуждаются эти функции.
- Терминология платформы Entity Framework
Определяет многие термины, представленные в модели EDM и Entity Framework и используемые в документации Entity Framework.
- Ресурсы платформы Entity Framework
Содержит ссылки на концептуальные разделы, а также ссылки на другие разделы и ресурсы по созданию приложений Entity Framework.