Entity Framework

редактировать
Entity Framework
Автор (ы) Microsoft
Разработчик (и) .NET Foundation
Первый выпуск11 августа 2008 г.; 12 лет назад (2008-08-11)
Стабильный выпуск Entity Framework 6: v6.4.4. Entity Framework Core: v3.1.4 / Entity Framework 6: 22 апреля 2020 г.; 6 месяцев назад (2020-04-22). Entity Framework Core: 22 апреля 2020 г.; 6 месяцев назад (2020-04-22)
Предварительный выпуск Entity Framework Core: v5.0.0-preview.3.20181.2 / Entity Framework Core: 31 марта 2020 г.; 6 месяцев назад (2020-03-31)
Репозиторий https://github.com/dotnet/ef6. https://github.com/dotnet/efcore
Написано наC#
Платформа .NET Framework, .NET Core
Тип Объектно-реляционное сопоставление
Лицензия Лицензия Apache 2.0
Веб-сайтmsdn. microsoft.com / en-us / data / ef.aspx

Entity Framework (EF) - это объектно-реляционное сопоставление с открытым исходным кодом (ORM) для ADO.NET. Первоначально он поставлялся как неотъемлемая часть .NET Framework. Начиная с Entity Framework версии 6, он поставляется отдельно от.NET Framework.

Содержание
  • 1 Обзор
  • 2 История
  • 3 Архитектура
  • 4 Модель данных сущности
    • 4.1 Сопоставление
    • 4.2 Сущности
    • 4.3 Взаимосвязи
    • 4.4 Язык определения схемы
  • 5 Запросы данных
    • 5.1 Entity SQL
      • 5.1.1 Канонические функции Entity SQL
    • 5.2 LINQ to Entities
    • 5.3 Собственные SQL
    • 5.4 Визуализаторы
  • 6 Entity Framework Profiler
  • 7 См. Также
  • 8 Ссылки
  • 9 Библиография
  • 10 Внешние ссылки
Обзор

Entity Framework - это набор технологий в ADO.NET, которые поддерживают разработку программных приложений, ориентированных на данные. Архитекторы и разработчики приложений, ориентированных на данные, обычно боролись с необходимостью достичь двух очень разных целей. Они должны моделировать сущности, отношения и логику бизнес-задач, которые они решают, а также должны работать с механизмами данных, используемыми для хранения и извлечения данных. Данные могут охватывать несколько систем хранения, каждая со своими собственными протоколами; даже приложения, которые работают с одной системой хранения, должны сбалансировать требования системы хранения с требованиями написания эффективного и поддерживаемого кода приложения. Эта проблема обычно называется «несоответствие объектно-реляционного импеданса ".

Многие инструменты объектно-реляционного сопоставления (ORM) (также известные как« объектно-реляционные менеджеры ») были разработаны, чтобы позволить разработчикам для работы с данными в форме объектов и свойств, зависящих от предметной области, таких как клиенты и адреса клиентов, не беспокоясь о базовых таблицах и столбцах базы данных, в которых хранятся эти данные. С ORM разработчики могут работать на более высоком уровне уровень абстракции, когда они имеют дело с данными, и могут создавать и поддерживать ориентированные на данные приложения с меньшим количеством кода, чем в традиционных приложениях. Entity Framework - это ORM-решение, которое в настоящее время продвигается для использования в стеке разработки Microsoft.

История

Первая версия Entity Framework (EFv1) была включена в.NET Framework 3.5 Service Pack 1 и Visual Studio 2008 Service Pack 1, выпущенный 11 августа 2008 г. (12 лет назад) (2008 г. -08-11).Эта версия получила широкую критику. Это вызвало даже недоверие, подписанное не менее чем тысячей разработчиков.

Вторая версия Entity Framework, названная Entity Framework 4.0 (EFv4), была выпущена как часть.NET 4.0 12 декабря. Апрель 2010 г. и устранены многие критические замечания, высказанные в отношении версии 1.

Третья версия Entity Framework, версия 4.1, была выпущена 12 апреля 2011 г. с поддержкой Code First.

Обновление версии 4.1 под названием Entity Framework 4.1 Update 1 было выпущено 25 июля 2011 года. Оно включает исправления ошибок и новые поддерживаемые типы.

Версия 4.3.1 была выпущена 29 февраля 2012 г. Было внесено несколько обновлений, например, поддержка миграции.

Версия 5.0.0 была выпущена 11 августа 2012 г. и ориентирована на.NET framework 4.5. Кроме того, эта версия доступна для.Net framework 4, но без каких-либо преимуществ во время выполнения по сравнению с версией 4.

Версия 6.0 была выпущена 17 октября 2013 г. и теперь является проектом с открытым исходным кодом под лицензией Apache License v2. Как и ASP.NET MVC, его исходный код размещен на GitHub с использованием Git. Эта версия имеет ряд улучшений для поддержки.

Затем Microsoft решила модернизировать, разбить на компоненты и перенести кроссплатформенность.NET в Linux, OSX и другие системы, а это означает, что следующая версия Entity Framework будет полностью переработана. 27 июня 2016 года он был выпущен как Entity Framework Core 1.0 вместе с ASP.NET Core 1.0 и.NET Core 1.0. Первоначально он назывался Entity Framework 7, но был переименован, чтобы подчеркнуть, что это было полное переписывание, а не инкрементное обновление, и оно не заменяет EF6.

Entity Framework Core 1.0 под лицензией Apache License v2, и создается полностью открыто на GitHub. Хотя Entity Framework Core 1.0 имеет некоторые концептуальные сходства с предыдущими версиями Entity Framework, это полностью новая кодовая база, разработанная, чтобы быть более эффективной, мощной, гибкой и расширяемой, будет работать в Windows, Linux и OSX и будет поддерживать новый диапазон. реляционных хранилищ данных и хранилищ данных NOSQL.

Entity Framework Core 2.0 был выпущен 14 августа 2017 года вместе с Visual Studio 2017 15.3 и ASP.NET Core 2.0.

Entity Framework Core 3.0 был выпущен 23 сентября 2019 вместе с Visual Studio 2019 16.3 и ASP.NET Core 3.0,

Entity Framework Core 3.1 (EF Core 3.1) был официально выпущен для производственного использования 3 декабря 2019 года (10 месяцев назад) (2019-12-03) и будет предпочтительной долгосрочной поддерживаемой версией по крайней мере до 3 декабря 2022 года.

Архитектура
Стек ADO.NET Entity Framework.

Архитектура ADO.NET Entity Framework, из снизу вверх, состоит из следующего:

  • Провайдеры, специфичные для источника данных, которые абстрагируют ADO. NET для подключения к базе данных при программировании с использованием концептуальной схемы.
  • Поставщик карт, поставщик для конкретной базы данных, который переводит дерево команд Entity SQL в запрос в собственном варианте SQL базы данных. Он включает в себя мост для конкретного хранилища, который является компонентом, ответственным за преобразование общего дерева команд в дерево команд для конкретного хранилища.
  • Анализатор EDM и отображение представления, которое принимает спецификацию SDL модели данных и как она отображается на лежащую в основе реляционную модель и позволяет программировать на основе концептуальной модели. На основе реляционной схемы он создает представления данных, соответствующие концептуальной модели. Он агрегирует информацию из нескольких таблиц, чтобы объединить их в объект, и разбивает обновление объекта на несколько обновлений для любой таблицы (таблиц), внесенных в этот объект.
  • Конвейер запросов и обновлений, обрабатывает запросы, фильтрует и обновляет запросы, чтобы преобразовать их в канонические деревья команд, которые затем преобразуются в запросы для конкретного магазина поставщиком карты.
  • Службы метаданных, которые обрабатывают все метаданные, связанные с сущностями, отношениями и сопоставлениями.
  • Транзакции, чтобы интегрироваться с транзакционными возможностями базового магазина. Если базовое хранилище не поддерживает транзакции, поддержка для него должна быть реализована на этом уровне.
  • API концептуального уровня, среда выполнения, которая предоставляет модель программирования для кодирования в соответствии с концептуальной схемой. Он следует шаблону ADO.NET, использующему объекты Connection для обращения к поставщику карты, используя объекты Command для отправки запроса и возвращая EntityResultSets или EntitySets, содержащие результат.
  • Отключенные компоненты, которые локально кэшируют наборы данных и сущность наборы для использования ADO.NET Entity Framework в среде, которая периодически подключается.
  • Встроенная база данных : ADO.NET Entity Framework включает облегченную встроенную базу данных для кэширования на стороне клиента и запросов реляционных данных.
  • Инструменты проектирования, например Mapping Designer, также включены в ADO.NET Entity Framework, что упрощает работу по сопоставлению концептуальной схемы с реляционной схемой и указанию, какие свойства типа сущности соответствуют какой таблице в базе данных.
  • Уровень программирования, который представляет EDM как программные конструкции, которые могут использоваться языками программирования.
    • Сервисы объектов, автоматически генерируют код для классов CLR, которые предоставляют те же свойства, что и сущность, тем самым обеспечивая создание экземпляров сущностей как объектов.NET.
    • Веб-сервисы, которые предоставляют сущности как веб-сервисы.
  • Сервисы высокого уровня, например сервисы отчетов, которые работают с сущностями, а не с реляционными данными.
Модель данных сущностей

Модель данных сущностей (EDM ) определяет концептуальную модель (CSDL) данных, используя метод моделирования, который сам называется моделью данных сущности, расширенной версией модели сущность-связь. Модель данных в первую очередь описывает Сущности и ассоциации, в которых они участвуют. Схема EDM выражается на языке определения схемы (SDL), который является приложением XML (расширенный язык разметки). Кроме того, также должно быть указано отображение (MSL) элементов концептуальной схемы (CSDL) в схему хранения (SSDL). Спецификация сопоставления также выражается в XML.

Visual Studio также предоставляет Entity Designer для визуального создания EDM и спецификации сопоставления. Результатом работы инструмента является XML-файл (*.edmx), определяющий схему и сопоставление. Файл Edmx содержит артефакты метаданных EF (содержимое CSDL / MSL / SSDL). Эти три файла (csdl, msl, ssdl) также можно создавать или редактировать вручную.

Mapping

Мастер модели данных сущности в Visual Studio изначально генерирует взаимно-однозначное (1: 1) отображение схемы базы данных и концептуальной схемы в большинстве случаев. В реляционной схеме элементы состоят из таблиц, при этом первичный и внешний ключи склеивают связанные таблицы. Напротив, типы сущностей определяют концептуальную схему данных.

Типы сущностей представляют собой совокупность нескольких типизированных полей - каждое поле сопоставляется с определенным столбцом в базе данных - и может содержать информацию из нескольких физических таблиц.. Типы сущностей могут быть связаны друг с другом независимо от отношений в физической схеме. Связанные сущности также отображаются аналогичным образом - через поле, имя которого обозначает отношение, в котором они участвуют и к которому они обращаются, которое вместо извлечения значения из некоторого столбца в базе данных просматривает взаимосвязь и возвращает сущность (или коллекцию сущностей) с

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

  • CustomerEntity, который содержит имя клиента из таблицы Customers, и адрес клиента из таблицы контактов.
  • OrderEntity, который инкапсулирует заказы определенного клиента, извлекая их из таблицы Orders.

Логическая схема и ее сопоставление с физической схемой представлены как Entity Data Model (EDM), заданная как XML-файл. ADO.NET Entity Framework использует EDM для фактического выполнения сопоставления, позволяя приложению работать с сущностями, при этом внутренне абстрагируясь от использования таких конструкций ADO.NET, как DataSet и RecordSet. ADO.NET Entity Framework выполняет соединения, необходимые для получения справочной информации об объектах из нескольких таблиц или при прохождении связи. Когда сущность обновляется, она отслеживает, из какой таблицы была получена информация, и выдает операторы обновления SQL для обновления таблиц, в которых были обновлены некоторые данные. ADO.NET Entity Framework использует eSQL, производную от SQL, для выполнения запросов, теоретико-множественных операций и обновлений сущностей и их отношений. Запросы в eSQL, если это необходимо, затем переводятся в собственный вариант SQL базовой базы данных.

Типы сущностей и наборы сущностей просто образуют логическую схему EDM и могут быть представлены как угодно. ADO.NET Entity Framework включает службу объектов, которая представляет эти сущности как объекты с элементами и связями, представленными как свойства. Таким образом, объекты Entity являются лишь интерфейсом для экземпляров типов сущностей EDM, что позволяет объектно-ориентированным языкам получать доступ к ним и использовать их. Точно так же могут быть созданы другие внешние интерфейсы, которые предоставляют сущности через веб-службы (например, WCF Data Services ) или XML, который используется при сериализации сущностей для постоянного хранения или передачи по сети.

Сущности

Сущности ** являются экземплярами EntityTypes; они представляют собой отдельные экземпляры объектов (например, клиентов, заказов), к которым относится информация. Идентичность сущности определяется типом сущности, экземпляром которого она является; в этом смысле тип сущности определяет класс, к которому принадлежит сущность, а также определяет, какие свойства сущность будет иметь. Свойства описывают некоторые аспекты сущности, давая ей имя и тип. Свойства типа сущности в ADO.NET Entity Framework полностью типизированы и полностью совместимы с системой типов, используемой в системе СУБД, а также с системой общих типов.NET Framework. Свойство может быть SimpleType или ComplexType, а также может быть многозначным. Все EntityTypes принадлежат некоторому пространству имен и имеют свойство EntityKey, которое однозначно идентифицирует каждый экземпляр типа сущности. Различные типы свойств различаются следующим образом:

  • SimpleType соответствует примитивным типам данных, таким как целые числа, символы и числа с плавающей запятой.
  • ComplexType представляет собой совокупность нескольких свойств типа SimpleType, или ComplexType. Однако, в отличие от EntityTypes, ComplexTypes не может иметь EntityKey. В Entity Framework v1 ComplexTypes не могут быть унаследованы.

Все экземпляры сущностей размещаются в EntityContainers, которые являются контейнерами для каждого проекта для сущностей. Каждый проект имеет один или несколько именованных EntityContainers, которые могут ссылаться на сущности в нескольких пространствах имен и типах сущностей. Несколько экземпляров одного типа сущности могут храниться в коллекциях, называемых EntitySets. Один тип сущности может иметь несколько EntitySets.

примитивные типы EDM (простые типы):

тип EDMсопоставление типов CLR
Edm.BinaryByte
Edm.BooleanBoolean
Edm.ByteByte
Edm.DateTimeDateTime
Edm.DateTimeOffsetDateTimeOffset
Edm.DecimalDecimal
Edm.DoubleDouble
Edm.GuidGuid
Edm.Int16Int16
Edm.Int32Int32
Edm.Int64Int64
Edm.SByteSByte
Edm.SingleОдиночная
Edm.StringString
Edm.TimeTimeSpan

Взаимосвязи

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

Типы отношений характеризуются своей степенью (арностью) или количеством типов сущностей, которые они связывают, и их множественностью. Однако в первоначальном выпуске ADO.NET Entity Framework отношения ограничиваются двоичными (второй степени) двунаправленными отношениями. Кратность определяет, сколько экземпляров сущностей можно связать вместе. В зависимости от множественности отношения могут быть один-к-одному, один-ко-многим или многие-ко-многим. Именованы отношения между сущностями; имя называется ролью. Он определяет цель отношения.

Тип отношения также может иметь связанную с ним операцию или действие, что позволяет выполнять некоторые действия над объектом в случае выполнения действия над связанным объектом. Отношение может быть указано для выполнения действия, когда некоторая операция выполняется для связанной сущности. Например, при удалении сущности, которая составляет часть отношения (операция OnDelete), могут быть предприняты следующие действия:

  • Cascade, который дает указание удалить экземпляр отношения и все связанные экземпляры сущности.
  • Нет .

Для ассоциативных отношений, которые могут иметь разную семантику на обоих концах, для обоих концов могут быть указаны разные действия.

Язык определения схемы

ADO.NET Entity Framework использует XML на основе языка определения данных, называемого языком определения схемы (SDL), для определения схемы EDM. SDL определяет SimpleTypes, аналогичные примитивным типам CTS, включая String, Int32, Double, Decimal, Guid и DateTime, среди прочего. Перечисление, которое определяет карту примитивных значений и имен, также считается простым типом. Перечисления поддерживаются только начиная с версии 5.0 и выше. ComplexTypes создаются на основе объединения других типов. Набор свойств этих типов определяет тип сущности. Это определение может быть записано в грамматике EBNF как:

EntityType :: = ENTITYTYPE entityTypeName [BASE entityTypeName] [ABSTRACT true | false] KEY propertyName [, propertyName] * {(propertyName PropertyType [PropertyFacet] *) +} PropertyType :: = ((PrimitiveType [PrimitiveTypeFacets] *) | (complexTypeName) | RowType PropertyFacet :: = ([NULLABLE true | false] | [DEFAULT defaultVal] | [MULTIPLICITY [1 | *]]) PropertyTypeFacet :: = MAXLENGTH | PRECISION | | UNICODE | FIXEDLENGTH | COLLATION | DATETIMEKIND | PRESERVESECONDS PrimitiveType :: = BINARY | STRING | BOOLEAN | SINGLE | DOUBLE | DECIMAL | GUID | BYTE | SBYTE | INT16 | INTIMAL | INT64 | DATETIME <283 | DATET TIMEO) используются для описания метаданных свойства, например, является ли оно допускающим значение NULL или имеет значение по умолчанию, а также мощность свойства, т. е. является ли свойство однозначным или многозначным. Кратность «1» означает однозначное свойство; «*» означает, что это многозначная собственность. Например, объект может быть обозначен в SDL как:

Тип отношения определяется как указание конечных точек и их кратностей. Например, связь «один ко многим» между клиентом и заказами может быть определена как

Запрос данных

Entity SQL

ADO.NET Entity Framework использует вариант Язык структурированных запросов, названный Entity SQL, нацелен на написание декларативных запросов и обновлений сущностей и отношений сущностей - на концептуальном уровне. Он отличается от SQL тем, что в нем нет явных конструкций для объединений, поскольку EDM предназначен для абстрактного разделения данных по таблицам.

Запросы к концептуальной модели облегчают классы EntityClient, которые принимают запрос Entity SQL. Конвейер запросов анализирует запрос Entity SQL в дереве команд, разделяя запрос по нескольким таблицам, которое передается поставщику EntityClient. Подобно поставщикам данных ADO.NET, поставщик EntityClient также инициализируется с помощью объекта Connection, который в дополнение к обычным параметрам хранилища данных и информации аутентификации требует схемы SDL и информации о сопоставлении. Поставщик EntityClient, в свою очередь, затем превращает дерево команд Entity SQL в запрос SQL в собственном варианте базы данных. Затем выполнение запроса возвращает Entity SQL ResultSet, который не ограничен табличной структурой, в отличие от ADO.NET ResultSets.

Entity SQL улучшает SQL, добавляя внутреннюю поддержку для:

  • типов, поскольку сущности ADO.NET полностью типизированы.
  • EntitySets, которые рассматриваются как коллекции сущностей.
  • Composability, которая снимает ограничения на использование подзапросов.

Entity SQL canonical functions

Канонические функции поддерживаются всеми поставщиками данных, совместимыми с Entity Framework. Их можно использовать в запросе Entity SQL. Кроме того, большинство методов расширения в LINQ to Entities транслируются в канонические функции. Они не зависят от какой-либо конкретной базы данных. Когда поставщик данных ADO.NET получает функцию, он преобразует ее в желаемый оператор SQL.

Но не все СУБД обладают эквивалентной функциональностью и набором стандартных встроенных функций. Также есть отличия в точности расчетов. Следовательно, не все канонические функции поддерживаются для всех баз данных, и не все канонические функции возвращают одинаковые результаты.

ГруппаКанонические функции
Агрегатные функцииAvg, BigCount, Count, Max, Min, StDev, StDevP, Sum, Var, VarP
Математические функцииAbs, Ceiling, Floor, Power, Round, Truncate
Строковые функцииConcat, Содержит, EndsWith, IndexOf, Left, Length, LTrim, Replace, Reverse, Right, RTrim, Substring, StartsWith, ToLower, ToUpper, Trim
Функции даты и времениAddMicroseconds, AddMilliseconds, AddSeconds, AddMinutes, AddHours, AddNanoseconds, AddDays, AddYears, CreateDateTime, AddMonths, CreateDateTimeOffset, CreateTime, CurrentDateTime, CurrentDateTimeOffset, CurrentUtcDateTime, день, DayOfYear, DiffNanoseconds, DiffMilliseconds, DiffMicroseconds, DiffSeconds, DiffMinutes, DiffHours, DiffDays, DiffMonths, DiffYears, GetTotalOffsetMinutes, час, миллисекунды, минута, Месяц, Секунда, TruncateTime, Год
Побитовое функцииBitWiseAnd, BitWiseNot, BitWiseOr, BitWiseXor
Другие функцииNewGuid

LINQ to Entities

Провайдер LINQ to Entities позволяет LINQ для запроса различных источников данных СУБД. Доступно несколько поставщиков конкретных серверов баз данных с поддержкой Entity Framework.

Собственный SQL

В Entity Framework v4 к классу ObjectContext были добавлены новые методы ExecuteStoreQuery () и ExecuteStoreCommand ().

Визуализаторы

Visual Studio имеет функцию, которая называется Visualizer. Запрос LINQ, написанный в Visual Studio, можно рассматривать как собственный SQL с помощью визуализатора во время сеанса отладки. Визуализатор для LINQ to Entities (объектный запрос), ориентированный на все СУБД, доступен в «VisualStudioGallery».

Entity Framework Profiler

Entity Framework Profiler - это инструмент объектно-реляционного сопоставления (ORM) это позволит устранить проблемы с производительностью в приложении ASP.NET с помощью Entity Framework. Он сканирует на наличие распространенных неэффективных запросов к базе данных, таких как проблема SELECT N + 1.

См. Также
  • Портал бесплатного программного обеспечения с открытым исходным кодом
Ссылки
Библиография
Внешние ссылки
Последняя правка сделана 2021-05-19 11:34:32
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте