Что такое entity framework c
Перейти к содержимому

Что такое entity framework c

  • автор:

Обзор 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 представляет специальную объектно-ориентированную технологию на базе фреймворка .NET для работы с данными. Если традиционные средства ADO.NET позволяют создавать подключения, команды и прочие объекты для взаимодействия с базами данных, то Entity Framework представляет собой более высокий уровень абстракции, который позволяет абстрагироваться от самой базы данных и работать с данными независимо от типа хранилища. Если на физическом уровне мы оперируем таблицами, индексами, первичными и внешними ключами, но на концептуальном уровне, который нам предлагает Entity Framework, мы уже работает с объектами.

Первая версия Entity Framework — 1.0 вышла еще в 2008 году и представляла очень ограниченную функциональность, базовую поддержку ORM (object-relational mapping — отображения данных на реальные объекты) и один единственный подход к взаимодействию с бд — Database First. С выходом версии 4.0 в 2010 году многое изменилось — с этого времени Entity Framework стал рекомендуемой технологией для доступа к данным, а в сам фреймворк были введены новые возможности взаимодействия с бд — подходы Model First и Code First.

Дополнительные улучшения функционала последовали с выходом версии 5.0 в 2012 году. И наконец, в 2013 году был выпущен Entity Framework 6.0, обладающий возможностью асинхронного доступа к данным.

Центральной концепцией Entity Framework является понятие сущности или entity. Сущность представляет набор данных, ассоциированных с определенным объектом. Поэтому данная технология предполагает работу не с таблицами, а с объектами и их наборами.

Любая сущность, как и любой объект из реального мира, обладает рядом свойств. Например, если сущность описывает человека, то мы можем выделить такие свойства, как имя, фамилия, рост, возраст, вес. Свойства необязательно представляют простые данные типа int, но и могут представлять более комплексные структуры данных. И у каждой сущности может быть одно или несколько свойств, которые будут отличать эту сущность от других и будут уникально определять эту сущность. Подобные свойства называют ключами .

При этом сущности могут быть связаны ассоциативной связью один-ко-многим, один-ко-одному и многие-ко-многим, подобно тому, как в реальной базе данных происходит связь через внешние ключи.

Отличительной чертой Entity Framework является использование запросов LINQ для выборки данных из БД. С помощью LINQ мы можем не только извлекать определенные строки, хранящие объекты, из бд, но и получать объекты, связанные различными ассоциативными связями.

Другим ключевым понятием является Entity Data Model . Эта модель сопоставляет классы сущностей с реальными таблицами в БД.

Entity Data Model состоит из трех уровней: концептуального, уровень хранилища и уровень сопоставления (маппинга).

На концептуальном уровне происходит определение классов сущностей, используемых в приложении.

Уровень хранилища определяет таблицы, столбцы, отношения между таблицами и типы данных, с которыми сопоставляется используемая база данных.

Уровень сопоставления (маппинга) служит посредником между предыдущими двумя, определяя сопоставление между свойствами класса сущности и столбцами таблиц.

Таким образом, мы можем через классы, определенные в приложении, взаимодействовать с таблицами из базы данных.

Способы взаимодействия с БД

Entity Framework предполагает три возможных способа взаимодействия с базой данных:

  • Database first : Entity Framework создает набор классов, которые отражают модель конкретной базы данных
  • Model first : сначала разработчик создает модель базы данных, по которой затем Entity Framework создает реальную базу данных на сервере.
  • Code first : разработчик создает класс модели данных, которые будут храниться в бд, а затем Entity Framework по этой модели генерирует базу данных и ее таблицы

Работа с Entity Framework 6

является продолжением технологии Microsoft ActiveX Data и предоставляет возможность работы с базами данных через объектно-ориентированный код C#. Этот подход предоставляет ряд существенных преимуществ: вам не нужно беспокоиться о коде доступа к данным, вам не нужно знать деталей работы СУБД SQL Server и синтаксиса языка запросов T-SQL, вместо этого вы работаете с таблицами базы данных как с классами C#, с полями этих таблиц — как со свойствами классов, а синтаксис SQL-запросов, который в ADO.NET раньше нужно было вставлять в код C# в виде команд, заменен на более удобный подход с LINQ. Entity Framework берет на себя обязанности по преобразованию кода C# в SQL-инструкции.

При работе с Entity Framework вам предоставляются огромные возможности по созданию модели базы данных с помощью интегрированной среды разработки (IDE) Visual Studio. Начиная с версии Entity Framework 4.1 вам предоставляется три подхода по проектированию базы данных, из которых вы можете выбрать для себя подходящий:

Database-First

Подходит для проектировщиков баз данных — сначала вы создаете базу данных с помощью различных инструментов (например, SQL Server Management Studio), а затем генерируете EDMX-модель базы данных (предоставляет удобный графический интерфейс для взаимодействия с базой данных в виде диаграмм и объектную модель в виде классов C#). В данном случае вам нужно работать с SQL Server и хорошо знать синтаксис T-SQL, но при этом не нужно разбираться в C#.

Model-First

Подходит для архитекторов — сначала вы создаете графическую модель EDMX в Visual Studio (в фоновом режиме создаются классы C# модели), а затем генерируете на основе диаграммы EDMX базу данных. При данном подходе не нужно знать ни деталей T-SQL ни синтаксиса C#.

Code-First

Подходит для программистов — при данном подходе модель EDMX вообще не используется и вы вручную настраиваете классы C# объектной модели (данный подход поддерживает как генерацию сущностных классов из существующей базы данных, так и создание базы данных из созданной вручную модели объектов C#). Очевидно, что это подходит для программистов, хорошо знакомых с синтаксисом C#.

Лично я при работе с Entity Framework выбираю подход Code-First, но в нашем руководстве мы рассмотрим все три подхода.

1. Знакомство с Entity Framework

  1. Развитие Entity Framework
  2. Простое приложение с использованием Entity Framework
  3. Подходы для работы с Entity Framework
  4. Использование Code-First
  5. Использование Model-First
  6. Использование Database-First

2. Code-First: аннотации и Fluent API

  1. Настройка столбцов таблицы
  2. Создание связи между таблицами
  3. Каскадное удаление данных
  4. Отношение один-к-одному (one-to-one) между таблицами
  5. Отношение многие-ко-многим (many-to-many) между таблицами
  6. Настройка схемы и таблиц базы данных
  7. Множественные сущности и таблицы
  8. Настройка привязки модели к базе данных
  9. Настройка подключения к базе данных
  10. Создание базы данных
  11. Миграции модели данных в Code-First
  12. Расширенные возможности настройки Code-First

3. Работа с данными

  1. Описание DbContext API
  2. Создание запросов
  3. Загрузка данных
  4. Загрузка связанных данных
  5. Вставка данных
  6. Обновление данных
  7. Удаление данных
  8. Уведомления о изменениях данных

Уроки C# | Entity Framework. Часть 1.

Каковы реальные шансы найти работу C#/.NET разработчику в 2024 году?

Продуктивность C# кода и вопрос его оптимизации

Перспективы профессии .NET разработчик в 2024 году

Что нового в .NET 8

Делегаты и события в C#. Основные понятия и практические сценарии использования

Как стать программистом? Python, Java, FrontEnd или .NET – что выбрать?

Стоит ли учить C# в 2023?

Как составить резюме, чтобы вас пригласили на собеседование

Это первй урок, по теме — «Entity Framework», данная тема будет разделена на три части. В первой части: Что такое Entity Framework? Изучайте программирование и информационные технологии на нашем онлайн ресурсе ITVDN.

Покупай подписку с доступом ко всем курсам и сервисам

Библиотека современных IT знаний в удобном формате

Выбирай свой вариант подписки в зависимости от задач, стоящих перед тобой. Но если нужно пройти полное обучение с нуля до уровня специалиста, то лучше выбирать Базовый или Премиум. А для того чтобы изучить 2-3 новые технологии, или повторить знания, готовясь к собеседованию, подойдет Пакет Стартовый.

  • Все видеокурсы на 3 месяца
  • Тестирование по 10 курсам
  • Проверка 5 домашних заданий
  • Консультация с тренером 30 мин
  • Все видеокурсы на 6 месяцев
  • Тестирование по 16 курсам
  • Проверка 10 домашних заданий
  • Консультация с тренером 60 мин
  • Все видеокурсы на 1 год
  • Тестирование по 24 курсам
  • Проверка 20 домашних заданий
  • Консультация с тренером 120 мин

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *