Что такое структура сущностей
Обновлено: 21.11.2024
Введение в Entity Framework Core
В этой статье я собираюсь дать вам обзор Entity Framework Core. Entity Framework Core, также известный как EF Core, является последней версией Entity Framework и полностью переписан с нуля. В рамках этой статьи мы собираемся обсудить следующие указатели.
- Что такое Entity Framework Core?
- Что такое ORM?
- Зачем нам нужно использовать ORM?
- Основные подходы к разработке EF.
- Первый подход к коду EF Core
- Первый подход к основной базе данных Entity Framework
- Поставщики баз данных EF Core
- Зачем использовать Entity Framework Core вместо EF 6.x?
Что такое Entity Framework Core?
Что такое ORM?
Термин ORM расшифровывается как Object-Relational Mapper и автоматически создает классы на основе таблиц базы данных, и наоборот. То есть он также может генерировать необходимый SQL для создания базы данных на основе классов.
Как разработчик, мы в основном работаем с бизнес-объектами приложения, а ORM Framework генерирует необходимый SQL (для выполнения операции CRUD), который может понять базовая база данных. Итак, простыми словами, мы можем сказать, что ORM Framework устраняет необходимость в большей части кода доступа к данным, который мы, как разработчики, обычно пишем.
Зачем нам нужно использовать ORM?
Давайте разберемся, почему нам нужно использовать ORM Framework, на примере.
Предположим, мы хотим разработать приложение для управления студентами колледжа. Для этого нам может понадобиться создать такие классы, как «Студент», «Отдел», «Адрес» и т. д. Технически мы назвали эти классы классами предметной области.
Без использования ORM Framework, например Entity Framework или EF Core, нам приходится писать много кода доступа к данным для выполнения операций CRUD, т. е. для хранения и извлечения данных о студентах, факультетах и адресах из базовых таблиц базы данных.
Например, для выполнения операций CRUD, т. е. чтения, вставки, обновления или удаления из таблицы базы данных, нам обычно требуется написать собственный код в нашем приложении для создания необходимых операторов SQL, которые могут быть поняты базовой базой данных. Опять же, когда мы хотим прочитать данные из базы данных в наше приложение, нам также нужно написать некоторый собственный код для сопоставления данных базы данных с нашими классами модели, такими как «Студент», «Отдел», «Адрес» и т. д. Это очень распространенная задача, поскольку разработчик для нас, что мы делаем почти в каждом приложении.
Среда ORM, такая как Entity framework или EF Core, может сделать все вышеперечисленное за нас и сэкономить много времени, если мы предоставим необходимую информацию для ORM Framework. ORM Framework находится между кодом нашего приложения и базой данных. Это устраняет необходимость в большей части пользовательского кода доступа к данным, который мы обычно пишем без ORM.
ORM берет на себя создание подключений к базе данных и выполнение команд, а также получение результатов запросов и их автоматическое воплощение в виде объектов вашего приложения.
ORM также помогает отслеживать изменения в этих объектах, и при получении указаний он также сохраняет эти изменения обратно в базу данных для вас.
Почему Entity Framework?
Entity Framework — это ORM, а ORM предназначены для повышения производительности разработчика за счет сокращения избыточной задачи сохранения данных, используемых в приложениях.
Entity Framework может генерировать необходимые команды базы данных для чтения или записи данных в базу данных и выполнять их для вас.
Если вы делаете запрос, вы можете выражать свои запросы к объектам вашего домена, используя LINQ to entity.
Entity Framework выполнит соответствующий запрос в базе данных, а затем материализует результаты в экземпляры объектов вашего домена, чтобы вы могли работать в своем приложении.
На рынке есть и другие ORM, такие как NHibernate и LLBLGen Pro. Большинство ORM обычно сопоставляют типы доменов непосредственно со схемой базы данных.
Entity Framework имеет более детальный уровень сопоставления, поэтому вы можете настраивать сопоставления, например, сопоставляя один объект с несколькими таблицами базы данных или даже несколько объектов с одной таблицей.
Entity Framework – это рекомендуемая Microsoft технология доступа к данным для новых приложений.
Entity Framework — это место, где делаются все инвестиции в будущее, что происходит уже несколько лет.
Концептуальная модель
Для разработчиков, которые привыкли к разработке, ориентированной на базы данных, самым большим изменением Entity Framework является то, что он позволяет вам сосредоточиться на своей бизнес-области. Что вы хотите, чтобы ваше приложение делало, не ограничиваясь возможностями базы данных?
В Entity Framework фокус называется концептуальной моделью. Это модель объектов вашего приложения, а не модель базы данных, которую вы используете для сохранения данных вашего приложения.
Ваша концептуальная модель может совпадать со схемой вашей базы данных или сильно отличаться от нее.
Вы можете использовать Visual Designer для определения концептуальной модели, которая затем может генерировать классы, которые вы в конечном итоге будете использовать в своем приложении.
Вы можете просто определить свои классы и использовать функцию Entity Framework под названием Code First. И тогда Entity Framework поймет концептуальную модель.
В любом случае Entity Framework решает, как перейти от концептуальной модели к базе данных. Таким образом, вы можете запрашивать объекты концептуальной модели и работать с ними напрямую.
Возможности
Ниже приведены основные функции Entity Framework. Этот список создан на основе наиболее примечательных функций, а также часто задаваемых вопросов о Entity Framework.
Вдохните жизнь в модели
Давний и распространенный подход к проектированию при создании приложения или службы заключается в разделении приложения или службы на три части: модель предметной области, логическая модель и физическая модель. Модель предметной области определяет сущности и отношения в моделируемой системе. Логическая модель реляционной базы данных нормализует сущности и отношения в таблицы с ограничениями внешнего ключа. Физическая модель обращается к возможностям конкретного механизма обработки данных, определяя детали хранилища, такие как секционирование и индексирование.
Администраторы баз данных уточняют физическую модель для повышения производительности, но программисты, пишущие код приложений, в основном ограничиваются работой с логической моделью, создавая SQL-запросы и вызывая хранимые процедуры. Модели предметной области обычно используются в качестве инструмента для сбора и передачи требований приложения, часто в виде инертных диаграмм, которые просматриваются и обсуждаются на ранних стадиях проекта, а затем от них отказываются. Многие группы разработчиков пропускают создание концептуальной модели и начинают с указания таблиц, столбцов и ключей в реляционной базе данных.
Entity Framework дает жизнь моделям, позволяя разработчикам запрашивать сущности и отношения в модели предметной области (называемой концептуальной моделью в Entity Framework), полагаясь на Entity Framework для преобразования этих операций в команды, зависящие от источника данных. Это освобождает приложения от жестко запрограммированных зависимостей от определенного источника данных.
При работе с Code First концептуальная модель сопоставляется с моделью хранения в коде. Entity Framework может вывести концептуальную модель на основе определенных вами типов объектов и дополнительных конфигураций. Метаданные сопоставления создаются во время выполнения на основе сочетания того, как вы определили типы доменов, и дополнительной информации о конфигурации, которую вы предоставляете в коде. Entity Framework создает базу данных по мере необходимости на основе метаданных. Дополнительные сведения см. в разделе Создание модели.
При работе с инструментами Entity Data Model Tools концептуальная модель, модель хранения и сопоставления между ними выражаются в схемах на основе XML и определяются в файлах с соответствующими расширениями имен:
Язык определения концептуальной схемы (CSDL) определяет концептуальную модель. CSDL — это реализация модели данных Entity Framework в 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 Data Model создают расширяемые классы данных на основе концептуальной модели. Эти классы являются частичными классами, которые могут быть расширены дополнительными элементами, добавленными разработчиком. По умолчанию классы, созданные для конкретной концептуальной модели, являются производными от базовых классов, предоставляющих службы для материализации сущностей в виде объектов, а также для отслеживания и сохранения изменений. Разработчики могут использовать эти классы для работы с сущностями и отношениями как с объектами, связанными ассоциациями. Разработчики также могут настраивать классы, созданные для концептуальной модели. Дополнительные сведения см. в разделе Работа с объектами.
Доступ к данным объекта и их изменение
Entity Framework — это не просто еще одно решение для объектно-реляционного сопоставления. В своей основе он позволяет приложениям получать доступ и изменять данные, представленные в виде сущностей и связей в концептуальной модели. Entity Framework использует информацию в модели и файлах сопоставления для преобразования объектных запросов к типам сущностей, представленным в концептуальной модели, в запросы, относящиеся к источнику данных. Результаты запроса материализуются в объекты, которыми управляет Entity Framework. Entity Framework предоставляет следующие способы запроса концептуальной модели и возврата объектов:
LINQ для сущностей. Обеспечивает поддержку интегрированных в язык запросов (LINQ) для запросов типов сущностей, определенных в концептуальной модели. Дополнительные сведения см. в разделе LINQ to Entities.
Сущностный SQL. Независимый от хранилища диалект SQL, который работает непосредственно с сущностями в концептуальной модели и поддерживает концепции Entity Data Model. Entity SQL используется как с объектными запросами, так и с запросами, которые выполняются с помощью поставщика EntityClient. Дополнительные сведения см. в разделе Обзор Entity SQL.
На следующей диаграмме показана архитектура Entity Framework для доступа к данным:
Инструменты модели данных сущностей могут создать класс, производный от System.Data.Objects.ObjectContext или System.Data.Entity.DbContext, который представляет контейнер сущностей в концептуальной модели. Этот контекст объекта предоставляет средства для отслеживания изменений и управления удостоверениями, параллелизмом и отношениями. Этот класс также предоставляет метод SaveChanges, который записывает вставки, обновления и удаления в источник данных. Подобно запросам, эти изменения вносятся либо командами, автоматически генерируемыми системой, либо хранимыми процедурами, указанными разработчиком.
Поставщики данных
Entity Framework включает обновленный поставщик данных SqlClient, поддерживающий канонические деревья команд. Дополнительные сведения см. в разделе SqlClient для Entity Framework.
Инструменты модели данных объекта
Вместе со средой выполнения Entity Framework Visual Studio включает инструменты сопоставления и моделирования. Дополнительные сведения см. в разделе Моделирование и сопоставление.
Подробнее
Чтобы узнать больше о Entity Framework, см.:
Приступая к работе. Содержит информацию о том, как быстро приступить к работе с помощью краткого руководства, в котором показано, как создать простое приложение Entity Framework.
Терминология Entity Framework — определяет многие термины, которые вводятся в модели данных Entity и Entity Framework и используются в документации Entity Framework.
Ресурсы Entity Framework. Содержит ссылки на концептуальные разделы и ссылки на внешние разделы и ресурсы для создания приложений Entity Framework.
ORM берет на себя создание подключений к базе данных и выполнение команд, а также получение результатов запросов и их автоматическое воплощение в виде объектов вашего приложения.
ORM также помогает отслеживать изменения в этих объектах, и при получении указаний он также сохраняет эти изменения обратно в базу данных для вас.
Почему Entity Framework?
Entity Framework — это ORM, а ORM предназначены для повышения производительности разработчика за счет сокращения избыточной задачи сохранения данных, используемых в приложениях.
Entity Framework может генерировать необходимые команды базы данных для чтения или записи данных в базу данных и выполнять их для вас.
Если вы делаете запрос, вы можете выражать свои запросы к объектам вашего домена, используя LINQ to entity.
Entity Framework выполнит соответствующий запрос в базе данных, а затем материализует результаты в экземпляры объектов вашего домена, чтобы вы могли работать в своем приложении.
На рынке есть и другие ORM, такие как NHibernate и LLBLGen Pro. Большинство ORM обычно сопоставляют типы доменов непосредственно со схемой базы данных.
Entity Framework имеет более детальный уровень сопоставления, поэтому вы можете настраивать сопоставления, например, сопоставляя один объект с несколькими таблицами базы данных или даже несколько объектов с одной таблицей.
Entity Framework – это рекомендуемая Microsoft технология доступа к данным для новых приложений.
Entity Framework — это место, где делаются все инвестиции в будущее, что происходит уже несколько лет.
Концептуальная модель
Для разработчиков, которые привыкли к разработке, ориентированной на базы данных, самым большим изменением Entity Framework является то, что он позволяет вам сосредоточиться на своей бизнес-области. Что вы хотите, чтобы ваше приложение делало, не ограничиваясь возможностями базы данных?
В Entity Framework фокус называется концептуальной моделью. Это модель объектов вашего приложения, а не модель базы данных, которую вы используете для сохранения данных вашего приложения.
Ваша концептуальная модель может совпадать со схемой вашей базы данных или сильно отличаться от нее.
Вы можете использовать Visual Designer для определения концептуальной модели, которая затем может генерировать классы, которые вы в конечном итоге будете использовать в своем приложении.
Вы можете просто определить свои классы и использовать функцию Entity Framework под названием Code First. И тогда Entity Framework поймет концептуальную модель.
В любом случае Entity Framework решает, как перейти от концептуальной модели к базе данных. Таким образом, вы можете запрашивать объекты концептуальной модели и работать с ними напрямую.
Возможности
Ниже приведены основные функции Entity Framework. Этот список создан на основе наиболее примечательных функций, а также часто задаваемых вопросов о Entity Framework.
Читайте также: