Entity framework что это
При работе с реляционными базами данных мы используем таблицы со строками и столбцами, такая инфраструктура устройства баз данных является очень структурированной. Перед широким внедрением объектно-ориентированного программирования мы работали в рамках “процедурного” программирования – для решения проблем использовался структурный код и функции. Устройство баз данных в виде таблиц, строк и столбцов было в какой-то степени похоже на структурные и процедурные шаблоны программирования, которые мы использовали в нашем коде. Жизнь была хороша .
После этого произошла эволюция на стороне кода – сейчас мы уже не используем функции, а думаем в терминах объектов, классов и моделей. Процесс разработки программного обеспечения значительно повзрослел за эти годы и обрел концептуальный уровень – изменилось все, начиная от кода (появились ООП, различные фреймворки и шаблоны облегчающие жизнь) и заканчивая командами разработчиков (современный крупный проект трудно представить без архитекторов, дизайнеров, оптимизаторов и т.д.)
История развития Entity Framework
Entity Framework представляет стратегический подход Microsoft к технологии доступа к данным для построения приложений. В отличие от предыдущих технологий доступа к данным, Entity Framework, в сочетании с Visual Studio, обеспечивает широкие возможности работы с базами данных и может использоваться в любых приложениях, будь это веб-сайт, настольное приложение или веб-служба. Давайте кратко рассмотрим хронологию развития Entity Framework.
Впервые Entity Framework появился в 2007 году, а его первая поддержка была обеспечена в Visual Studio 2008, после чего этот API-интерфейс проделал долгий путь и оброс новыми возможностями:
Текущей версией Entity Framework является 6, в которой появилась поддержка асинхронных запросов и возможность работы с хранимыми процедурами через подход Code-First. Более подробный список изменений в версиях Entity Framework вы можете увидеть на сайте MSDN в статье Entity Framework Version History.
Структура Entity Framework
Теперь давайте кратко рассмотрим некоторые ключевые моменты Entity Framework.
Модель EDM
Entity Framework акцентирует свое внимание на моделировании, в котором вы увидите много знакомых вещей – здесь используются диаграммы ER (entity-relationship, “сущность-отношение”), подход с использованием логического и физического проектирования слоев и многое другое. Ядром Entity Framework является модель EDM (Entity Data Model), суть которой заключается в хранении сущностей (entity) в виде строго типизированных классов, а не в виде объектов схемы базы данных (показано на рисунке ниже). Модель EDM позволяет обеспечить связь между сущностными классами в коде и таблицами базы данных.
Обратите внимание, что на рисунке выше, таблицы базы данных непосредственно не отображаются на классы сущностей, вместо этого у разработчика есть возможность управлять процессом отображения и он может, например, разбить таблицу на несколько сущностей или наоборот, объединить несколько таблиц в одной сущности (хотя зачастую программисты не используют эту возможность и используют отображение “1 таблица – 1 сущность”).
Архитектура Entity Framework в абстрактном смысле основана на слоях (layers): рабочий, удаленный и связующий.
Классы с кодом сущностей содержатся в рабочем слое, в котором работают программисты. В зависимости от того, какой подход вы используете (Code-First или DB-First), рабочий слой может быть смоделирован либо с помощью графического дизайнера Visual Studio, либо с помощью кода. После этого у программистов появляется широкий инструментарий для работы с Entity Framework. Синтаксис рабочего слоя описывается с помощью языка Conceptual Schema Definition Language (CSDL).
Удаленный слой определяет таблицы, столбцы, строки, отношения между таблицами базы данных. Синтаксис удаленного слоя описывается с помощью языка Store Schema Definition Language (SSDL).
Связующий слой определяет соответствие между рабочим и удаленным слоями, он связывает свойства сущностного класса в рабочем слое со столбцами таблицы базы данных в удаленном слое. Управлять этим слоем (т.е деталями привязки) можно из окна Mapping Details находящегося в инструментах дизайнера Visual Studio или с помощью аннотаций Fluent API, если вы работаете с подходом Code-First. Язык Mapping Specification Language (MSL) определяет синтаксис связующего слоя.
Важно отметить, что языки CSDL, SSDL и MSL имеют синтаксис XML, но при этом используют разную семантику.
Файлы Entity Framework
Все файлы, используемые в Entity Framework основаны на синтаксисе XML. Использование XML делает файлы простыми и универсальными для других приложений. Также XML-файлы читабельны для человека – вы можете в любой момент открыть и просмотреть содержимое этих файлов. Тем не менее, каждый элемент Entity Framework использует различные файлы XML с различным расширением.
После того как вы создадите новое приложение, которое опирается на Entity Framework и добавите сущностные классы базы данных, вы сможете увидеть результирующие файлы в основной папке проекта (в следующей статье мы более подробно опишем генерацию сущностных классов). В среде Visual Studio 2012 вы найдете единственный файл Entity Data Model XML (.EDMX), хотя в более старых версиях Visual Studio возможно будет создано несколько файлов (один для каждой сущности).
Файл EDMX содержит в себе несколько секций, написанных на языках CSDL, SSDL и MSL, представляющих разные слои в архитектуре Entity Framework. Чтобы открыть исходный код этого файла в Visual Studio, щелкните по нему правой кнопкой мыши и выберите в контекстном меню Open With…, после чего в диалоговом окне выберите вариант XML Editor.
Раздел CSDL содержит XML-код, необходимый для построения рабочего слоя:
Подходы для работы с Entity Framework
В Entity Framework поддерживается три подхода к разработке:
Database-First
Model-First
Code-First
Предоставление жизненного цикла моделям
Многолетним и общим подходом к разработке является подход, при котором построение приложения или службы представляет собой его разделение на три части: модель домена, логическую модель и физическую модель. Модель домена определяет сущности и связи в моделируемой системе. Логическая модель для реляционной базы данных обеспечивает нормализацию сущностей и связей в целях создания таблиц с ограничениями внешнего ключа. В физической модели учитываются возможности конкретной системы обработки данных путем определения зависящих от ядра базы данных подробных сведений о хранении данных, которые касаются секционирования и индексирование.
Физическая модель совершенствуется администраторами базы данных в целях повышения производительности, но программисты, которые разрабатывают код приложения, в основном вынуждены ограничиваться работой с логической моделью, подготавливая SQL-запросы и вызывая хранимые процедуры. Модели домена в основном используются как инструмент для представления и обмена мнениями о требованиях к приложению, поэтому чаще всего служат в качестве практически не изменяющихся схем, которые рассматриваются и обсуждаются на ранних стадиях проекта, после чего выходят из сферы внимания. Во многих коллективах разработчиков принято пропускать этап создания концептуальной модели и начинать с определения таблиц, столбцов и ключей в реляционной базе данных.
Entity Framework дает жизнь модели, позволяя разработчикам запрашивать сущности и связи в модели предметной области (называемой концептуальной моделью в Entity Framework), в то же время полагаться на Entity Framework преобразования этих операций в команды, относящиеся к источнику данных. Это позволяет отказаться от применения в приложениях жестко заданных зависимостей от конкретного источника данных.
При работе в режиме Code First концептуальная модель сопоставлена с режимом хранения в коде. Entity Framework может вычислять концептуальную модель на основе типов объектов и дополнительных конфигураций, которые вы определяете. Метаданные сопоставления формируются во время выполнения на основе сочетания определений типов домена и дополнительной информации о конфигурации, которая указана в коде. Entity Framework создает базу данных по мере необходимости на основе метаданных. Дополнительные сведения см. в разделе Создание модели.
При работе со средствами работы с моделью EDM концептуальная модель, модель хранения и сопоставление между ними выражены в схемах на основе XML и определены в файлах с именами с соответствующими расширениями.
Язык CSDL определяет концептуальную модель. Язык CSDL — это реализация EDMEntity 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 сопоставляет реляционные таблицы, столбцы и ограничения внешнего ключа в логических моделях с сущностями и связями в концептуальных моделях. Это позволяет достичь большей гибкости при определении объектов и оптимизации логической модели. Средства EDM создают расширяемые классы данных на основе концептуальной модели. Эти классы являются разделяемыми классами, которые могут быть расширены с помощью дополнительных членов, добавленных разработчиком. По умолчанию классы, сформированные для определенной концептуальной модели, являются производными от базовых классов, предоставляющих службы для материализации сущностей в виде объектов, а также для отслеживания и сохранения изменений. Разработчики могут использовать эти три класса для работы с сущностями и связями как с объектами, относящимися к ассоциациям. Разработчики смогут также настраивать классы, сформированные для концептуальной модели. Дополнительные сведения см. в разделе Работа с объектами.
Доступ и изменение данных сущности
Платформа Entity Framework — это не просто еще одно средство объектно-реляционного сопоставления. Ее цель — предоставить приложениям возможность чтения и изменения данных, представленных в виде сущностей и связей в концептуальной модели. Entity Framework использует сведения в файлах модели и сопоставления для преобразования запросов объектов в типы сущностей, представленные в концептуальной модели, в запросы, относящиеся к источникам данных. Результаты запроса собиваются на объекты, которыми управляет Entity Framework. Entity Framework предоставляет следующие способы запроса концептуальной модели и возврата объектов.
LINQ to Entities. Обеспечивает поддержку запросов LINQ для выполнения запросов к типам сущности, которые определены в концептуальной модели. дополнительные сведения см. в разделе LINQ to Entities.
Entity SQL. независимый от хранилища диалект SQL, который работает непосредственно с сущностями в концептуальной модели и поддерживает EDM концепции. Entity SQL используется как с запросами объектов, так и с запросами, которые выполняются с помощью поставщика EntityClient. дополнительные сведения см. в разделе Entity SQL обзор.
На следующей схеме показана архитектура, применяемая в платформе Entity Framework для доступа к данным.
Средства EDM могут создать класс, производный от System.Data.Objects.ObjectContext или System.Data.Entity.DbContext , представляющий контейнер сущностей в концептуальной модели. Контекст объекта предоставляет средства для отслеживания изменений и управления идентификаторами, параллелизмом и связями. Этот класс представляет также доступ к методу SaveChanges , который записывает результаты вставки, обновления и удаления данных в источник данных. Подобно запросам, эти изменения производятся либо командами, автоматически сформированными системой, либо хранимыми процедурами, указанными разработчиком.
Поставщики данных
Entity Framework включает обновленный поставщик данных SqlClient, который поддерживает канонические деревья команд. Дополнительные сведения см. в разделе SqlClient для Entity Framework.
Средства модели EDM
вместе со средой выполнения Entity Framework Visual Studio включает средства сопоставления и моделирования. Дополнительные сведения см. в разделе моделирование и сопоставление.
Дополнительные сведения
Дополнительные сведения о Entity Framework см. в следующих статьях:
Начало работы — содержит сведения о том, как быстро начать работу с помощью краткого руководства, в котором показано, как создать простое приложение Entity Framework.
Entity Framework терминология определяет множество терминов, которые появились EDM и Entity Framework и используются в документации Entity Framework.
Entity Framework ресурсы — ссылки на основные разделы и ссылки на внешние разделы и ресурсы для создания Entity Framework приложений.
Почему Entity Framework?
- Entity Framework может генерировать команды базы данных, необходимые для чтения или записи данных, а также выполнять их.
- При необходимости можно выразить запросы через объекты домена, используя LINQ.
- Entity Framework выполняет соответствующий запрос в базе данных, а затем предоставляет результаты в экземплярах объектов домена, чтобы вы могли работать с ними в приложении.
На данный момент существуют и другие ORM , такие как NHibernate и LLBLGen Pro . Большинство ORM обычно помещают типы домена непосредственно в схему базы данных.
Entity Framework имеет более сложный уровень отображения, поэтому позволяет настраивать сопоставления. Например, сопоставления единичного объекта с несколькими таблицами базы данных или даже с несколькими объектами в одной таблице.
Концептуальная модель
Для разработчиков, которые ведут проекты, ориентированные на базу данных, преимущество Entity Framework заключается в том, что он позволяет сосредоточиться на бизнес-домене. Хотите, чтобы ваше приложение не ограничивалось только тем, что может сделать база данных?
В любом случае Entity Framework обрабатывает то, как перейти от вашей концептуальной модели к базе данных. Таки вы можете запросить объекты концептуальной модели и работать с ними напрямую.
Функции
Ниже перечислены основные функции Entity Framework . В этот список вошли наиболее важные функции фреймворка, а также те, о которых разработчики часто задают вопросы.
Пожалуйста, оставляйте ваши отзывы по текущей теме материала. Мы крайне благодарны вам за ваши комментарии, дизлайки, подписки, лайки, отклики!
Пожалуйста, оставляйте ваши мнения по текущей теме материала. Мы очень благодарим вас за ваши комментарии, лайки, отклики, подписки, дизлайки!
Вступление
Например, если разработчик напрямую работает с базами данных, программист должен думать о подключении, подготовке SQL и параметров SQL, как отправлять запросы и о транзакциях. А с помощью Entity Framework Core все это делается автоматически — разработчик работает непосредственно с классами NET.
Подходы ORM
У ORM есть несколько подходов.
Модели Entity Framework Core
Все таблицы базы данных определяются в Entity Framework в виде классов моделей или сущностей (entity), как правило, по принципу 1 таблица, например users, – 1 класс в NET, например, User. Такие пары называют условностями, и они определены в классе контекста данных как наборы DbSet и такой подход работает по умолчанию.
Хотя существуют такие механизмы, такие как Fluent API и аннотации данных, возможно переопределить эти условности или дополнительные правила конфигурации.
Миграции
В процессе разработки вполне вероятна ситуация, что класс модели Entity Framework изменился, и приходится удалять и базу данных, чтобы сохранялось соответствие модели. Но при удалении базы данных удаляются и все данные из нее.
Чтобы сохранить данные при изменении модели, в Entity Framework Core существует функция миграции. Она позволяет последовательно применять изменения схемы к базе данных, чтобы синхронизировать ее с моделью данных.
В миграции существуют операции, которые позволяют удалять, добавлять столбцы и таблицы, внешние ключи, изменять настройки столбцов, добавлять, удалять и изменять данные, и так далее. При создании миграции автоматически создается класс, где выполняются операции, которые необходимы для применения миграции Up() и ее возврата в метод Down().
С Entity Framework в NET неразрывно связан и LINQ. LINQ — это Language Integrated Query или Внутриязыковой запрос — это такая технология, которая представляет собой набор функций в NET, которые позволяют писать структурированные запросы к базе данных.
Заключение
Таким образом мы кратко пробежались по возможностям Entity Framework Core. Как вы увидели, он действительно очень мощный, причем настолько, что программисту, который с ним работает даже не обязательно знать SQL. И Entity Framework Core по праву принадлежит первое место среди ORM в мире NET.
Читайте также: