Entity Framework - Entity Framework

Entity Framework
Оригинальный автор (ы)Microsoft
Разработчики).NET Foundation
изначальный выпуск11 августа 2008 г.; 12 лет назад (2008-08-11)
Стабильный выпуск
Entity Framework 6: v6.4.4
Entity Framework Core: v5.0.0 / Entity Framework 6: 22 апреля 2020 г.; 7 месяцев назад (2020-04-22)[1]
Entity Framework Core: 24 октября 2020 г.; 30 дней назад (2020-10-24)[2]
Репозиторийgithub.com/ dotnet/ ef6
github.com/ dotnet/ efcore
Написано вC #
Платформа.NET Framework,
.NET Core
ТипОбъектно-реляционное отображение
ЛицензияЛицензия Apache 2.0
Интернет сайтmsdn.microsoft.com/ en-us/данные/ ef.aspx

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

Обзор

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

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

История

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

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

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

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

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

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

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

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

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

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

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

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

Архитектура

Стек 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) данных, используя метод моделирования, который сам называется моделью данных сущности, расширенной версией модель сущность – связь.[19]Модель данных в первую очередь описывает Сущности и Ассоциации они участвуют в. Схема EDM выражается в Язык определения схемы (SDL), который представляет собой приложение XML (расширенный язык разметки). Кроме того, также необходимо указать отображение (MSL) элементов концептуальной схемы (CSDL) в схему хранения (SSDL). Спецификация отображения также выражается в XML.[20]

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

Картография

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

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

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

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

Логическая схема и ее сопоставление с физической схемой представлены как Модель данных сущности (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 ) или XML, который используется при сериализации сущностей для постоянного хранения или передачи по сети.[22]

Сущности

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

  • SimpleType, соответствует примитивным типам данных, таким как Целое число, Символы и Плавающая точка числа.[23]
  • ComplexType, представляет собой совокупность нескольких свойств типа SimpleType, или ComplexType. в отличие Тип объектаs, однако, ComplexTypes не может иметь EntityKey. В Entity Framework v1 ComplexTypes не может передаваться по наследству.[24]

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

Примитивные типы EDM (простые типы):[23][25]

Тип EDMСопоставление типов CLR
Edm.BinaryБайт[]
Эдм БуланБулево
Эдм.БайтБайт
Edm.DateTimeDateTime
Edm.DateTimeOffsetDateTimeOffset
Edm.DecimalДесятичная дробь
Эдм. ДвойнойДвойной
Edm.GuidГид
Edm.Int16Int16
Edm.Int32Int32
Edm.Int64Int64
Edm.SByteSByte
Эдм. Синглне замужем
Edm.StringСтрока
Эдм. ВремяПромежуток времени

Отношения

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

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

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

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

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

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

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

  Тип объекта ::= ENTITYTYPE entityTypeName [BASE entityTypeName]    [РЕФЕРАТ правда|ложный] KEY propertyName [, Имя свойства]*      {(propertyName PropertyType [PropertyFacet]*) +}  PropertyType ::= ((PrimitiveType [PrimitiveTypeFacets]*)    |  (complexTypeName) | RowType  PropertyFacet ::= ( [NULLABLE истина | ложный] |    [ПО УМОЛЧАНИЮ defaultVal] | [МНОЖЕСТВЕННОСТЬ [ 1|*] ] )  PropertyTypeFacet ::= МАКСИМАЛЬНАЯ ДЛИНА | ТОЧНОСТЬ | МАСШТАБ | UNICODE | ФИКСИРОВАННАЯ ДЛИНА | КОЛЛЕКЦИЯ    | DATETIMEKIND | СОХРАНИТЬ  PrimitiveType ::= БИНАРНЫЙ | STRING | BOOLEAN    | НЕ ЗАМУЖЕМ | ДВОЙНОЙ | ДЕСЯТИЧНАЯ ДРОБЬ | GUID    | БАЙТ | SBYTE | INT16 | INT32 | INT64    | ДАТА ВРЕМЯ | DATETIMEOFFSET | ВРЕМЯ )

Грани используются для описания метаданных свойства, например, является ли оно допускающим значение NULL или имеет значение по умолчанию, а также мощность свойства, то есть, является ли свойство однозначным или многозначным. Кратность «1» означает однозначное свойство; «*» означает, что это многозначная собственность. В качестве примера, объект может быть обозначен в SDL как:[27]

 Имя ="Адрес">    <Свойство Имя ="Улица" Тип ="Строка" Обнуляемый ="ложный" />    <Свойство Имя ="Город" Тип ="Строка" Обнуляемый ="ложный" />    <Свойство Имя ="Страна" Тип ="Строка" Обнуляемый ="ложный" />    <Свойство Имя ="Почтовый индекс" Тип ="Int32" /></ComplexType> Имя ="Покупатель">    <Key>         Имя ="Эл. адрес" />    </Key>    <Свойство Имя ="Имя" Тип ="Строка" />    <Свойство Имя ="Эл. адрес" Тип ="Строка" Обнуляемый ="ложный" />    <Свойство Имя ="Адрес" Тип ="Адрес" /></EntityType>

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

<Ассоциация Имя ="CustomerAndOrders">    <Конец Тип ="Покупатель" Кратность ="1" />    <Конец Тип ="Заказы" Кратность ="*">         Действие ="Каскад" />    </End></Association>

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

Сущность SQL

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

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

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

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

Канонические функции Entity SQL

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

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

ГруппаКанонические функции[28]
Агрегатные функцииСреднее, BigCount, Count, Max, Min, StDev, StDevP, Sum, Var, VarP
Математические функцииАбс, Потолок, Пол, Мощность, Круглый, Усекать
Строковые функцииConcat, Contains, 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, Hour, Millisecond, Minute, Month, Second, TruncateTime, Year
Побитовые функцииBitWiseAnd, BitWiseNot, BitWiseOr, BitWiseXor
Прочие функцииNewGuid

LINQ to Entities

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

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

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

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

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

Профилировщик Entity Framework

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

Смотрите также

использованная литература

  1. ^ «Релизы · dotnet / ef6 · GitHub».
  2. ^ «Релизы · dotnet / efcore · GitHub».
  3. ^ Криль, Пол (20 июля 2012 г.). «Microsoft с открытым исходным кодом Entity Framework». InfoWorld. Получено 2012-07-24.
  4. ^ https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/ef/overview
  5. ^ ADO .NET Entity Framework: вотум недоверия
  6. ^ «Обновление Entity Framework в .NET 4 и Visual Studio 2010». Блог команды ADO.NET. 11 мая 2009 года. Архивировано с оригинал 20 января 2010 г.. Получено 1 ноября, 2011.
  7. ^ «EF4.3.1 и EF5 Beta 1 доступны в NuGet». Блог команды ADO.NET. 29 февраля 2012 г. Архивировано с оригинал 25 марта 2012 г.. Получено 27 марта, 2012.
  8. ^ «EF5 доступен на CodePlex». 11 августа 2012 г.
  9. ^ "EF6 RTM доступен". 17 октября 2013 г. Архивировано с оригинал на 2014-03-30.
  10. ^ «Entity Framework - Главная». 14 сентября 2016 г.
  11. ^ «История версий EF».
  12. ^ а б «EF7 - Новые платформы, новые хранилища данных». 19 мая 2014 года. Архивировано с оригинал 2015-09-29.
  13. ^ «Доступен Entity Framework Core 1.0.0». 27 июня 2016 г.
  14. ^ Гензельман, Скотт. «ASP.NET 5 мертв - знакомство с ASP.NET Core 1.0 и .NET Core 1.0 - Скотт Хансельман». www.hanselman.com. Получено 2016-07-11.
  15. ^ «Представляем .NET Core 2.0». Блог .NET. 14 августа 2017.
  16. ^ «Представляем .NET Core 3.0». Блог .NET. 23 сентября 2019.
  17. ^ https://docs.microsoft.com/en-us/ef/core/what-is-new/
  18. ^ https://www.nuget.org/packages/Microsoft.EntityFrameworkCore
  19. ^ «Модель данных сущности». MSDN, Microsoft. 2 августа 2012 г.. Получено 15 августа, 2013.
  20. ^ CSDL, SSDL и MSL Технические характеристики, MSDN, в архиве из оригинала от 08.11.2010, получено 2010-12-06
  21. ^ Мастер модели данных сущности, MSDN, получено 2010-12-06
  22. ^ Kogent Solutions Inc. (2009 г.), Черная книга ASP.NET 3.5, Dreamtech Press, ISBN  81-7722-831-5
  23. ^ а б Простые типы (EDM), MSDN, получено 2010-12-06
  24. ^ Элемент ComplexType (CSDL), MSDN, получено 2010-12-06
  25. ^ Типы концептуальных моделей, MSDN, получено 2010-12-06
  26. ^ Элемент OnDelete (CSDL), MSDN, получено 2010-12-06
  27. ^ Фасеты (CSDL), MSDN, получено 2010-12-06
  28. ^ а б Канонические функции (Entity SQL), MSDN, получено 2010-03-29
  29. ^ VisualStudioGallery
  30. ^ «Профилировщик Entity Framework». hibernatingrhinos.com. Спящие носороги. Получено 2020-05-20.

Список используемой литературы

внешние ссылки