Автор (ы) | 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.
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, из снизу вверх, состоит из следующего:
Модель данных сущностей (EDM ) определяет концептуальную модель (CSDL) данных, используя метод моделирования, который сам называется моделью данных сущности, расширенной версией модели сущность-связь. Модель данных в первую очередь описывает Сущности и ассоциации, в которых они участвуют. Схема EDM выражается на языке определения схемы (SDL), который является приложением XML (расширенный язык разметки). Кроме того, также должно быть указано отображение (MSL) элементов концептуальной схемы (CSDL) в схему хранения (SSDL). Спецификация сопоставления также выражается в XML.
Visual Studio также предоставляет Entity Designer для визуального создания EDM и спецификации сопоставления. Результатом работы инструмента является XML-файл (*.edmx), определяющий схему и сопоставление. Файл Edmx содержит артефакты метаданных EF (содержимое CSDL / MSL / SSDL). Эти три файла (csdl, msl, ssdl) также можно создавать или редактировать вручную.
Мастер модели данных сущности в Visual Studio изначально генерирует взаимно-однозначное (1: 1) отображение схемы базы данных и концептуальной схемы в большинстве случаев. В реляционной схеме элементы состоят из таблиц, при этом первичный и внешний ключи склеивают связанные таблицы. Напротив, типы сущностей определяют концептуальную схему данных.
Типы сущностей представляют собой совокупность нескольких типизированных полей - каждое поле сопоставляется с определенным столбцом в базе данных - и может содержать информацию из нескольких физических таблиц.. Типы сущностей могут быть связаны друг с другом независимо от отношений в физической схеме. Связанные сущности также отображаются аналогичным образом - через поле, имя которого обозначает отношение, в котором они участвуют и к которому они обращаются, которое вместо извлечения значения из некоторого столбца в базе данных просматривает взаимосвязь и возвращает сущность (или коллекцию сущностей) с
Типы сущностей образуют класс объектов, которым соответствуют сущности, при этом Сущности являются экземплярами типов сущностей. Сущности представляют собой отдельные объекты, которые составляют часть проблемы, решаемой приложением, и индексируются с помощью ключа. Например, преобразовывая физическую схему, описанную выше, у нас будет два типа сущностей:
Логическая схема и ее сопоставление с физической схемой представлены как 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, которое однозначно идентифицирует каждый экземпляр типа сущности. Различные типы свойств различаются следующим образом:
Все экземпляры сущностей размещаются в EntityContainers, которые являются контейнерами для каждого проекта для сущностей. Каждый проект имеет один или несколько именованных EntityContainers, которые могут ссылаться на сущности в нескольких пространствах имен и типах сущностей. Несколько экземпляров одного типа сущности могут храниться в коллекциях, называемых EntitySets. Один тип сущности может иметь несколько EntitySets.
примитивные типы EDM (простые типы):
тип EDM | сопоставление типов CLR |
---|---|
Edm.Binary | Byte |
Edm.Boolean | Boolean |
Edm.Byte | Byte |
Edm.DateTime | DateTime |
Edm.DateTimeOffset | DateTimeOffset |
Edm.Decimal | Decimal |
Edm.Double | Double |
Edm.Guid | Guid |
Edm.Int16 | Int16 |
Edm.Int32 | Int32 |
Edm.Int64 | Int64 |
Edm.SByte | SByte |
Edm.Single | Одиночная |
Edm.String | String |
Edm.Time | TimeSpan |
Любые два типа сущностей могут быть связаны либо отношение ассоциации, либо отношение содержания. Например, отгрузка, выставляемая клиенту, является ассоциацией, тогда как заказ, содержащий детали заказа, является отношением сдерживания. Отношение включения также можно использовать для моделирования наследования между сущностями. Связь между двумя типами сущностей определяется типом отношения, экземпляры которого, называемые отношениями, связывают экземпляры сущности. В будущих выпусках могут быть введены другие типы типов отношений, такие как Состав или Идентификация.
Типы отношений характеризуются своей степенью (арностью) или количеством типов сущностей, которые они связывают, и их множественностью. Однако в первоначальном выпуске ADO.NET Entity Framework отношения ограничиваются двоичными (второй степени) двунаправленными отношениями. Кратность определяет, сколько экземпляров сущностей можно связать вместе. В зависимости от множественности отношения могут быть один-к-одному, один-ко-многим или многие-ко-многим. Именованы отношения между сущностями; имя называется ролью. Он определяет цель отношения.
Тип отношения также может иметь связанную с ним операцию или действие, что позволяет выполнять некоторые действия над объектом в случае выполнения действия над связанным объектом. Отношение может быть указано для выполнения действия, когда некоторая операция выполняется для связанной сущности. Например, при удалении сущности, которая составляет часть отношения (операция OnDelete), могут быть предприняты следующие действия:
Для ассоциативных отношений, которые могут иметь разную семантику на обоих концах, для обоих концов могут быть указаны разные действия.
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, добавляя внутреннюю поддержку для:
Канонические функции поддерживаются всеми поставщиками данных, совместимыми с 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 для запроса различных источников данных СУБД. Доступно несколько поставщиков конкретных серверов баз данных с поддержкой Entity Framework.
В Entity Framework v4 к классу ObjectContext были добавлены новые методы ExecuteStoreQuery () и ExecuteStoreCommand ().
Visual Studio имеет функцию, которая называется Visualizer. Запрос LINQ, написанный в Visual Studio, можно рассматривать как собственный SQL с помощью визуализатора во время сеанса отладки. Визуализатор для LINQ to Entities (объектный запрос), ориентированный на все СУБД, доступен в «VisualStudioGallery».
Entity Framework Profiler - это инструмент объектно-реляционного сопоставления (ORM) это позволит устранить проблемы с производительностью в приложении ASP.NET с помощью Entity Framework. Он сканирует на наличие распространенных неэффективных запросов к базе данных, таких как проблема SELECT N + 1.