Entity Framework ( EF ) - это среда объектно-реляционного сопоставления (ORM) с открытым исходным кодом [3] для ADO.NET . Первоначально он поставлялся как неотъемлемая часть .NET Framework . Начиная с Entity Framework версии 6, он поставляется отдельно от .NET Framework. [ необходима цитата ]
Автор (ы) оригинала | Microsoft |
---|---|
Разработчики) | .NET Foundation |
Первый выпуск | 11 августа 2008 г . |
Стабильный выпуск | |
Репозиторий | github github |
Написано в | C # |
Платформа | .NET Framework , .NET Core |
Тип | Объектно-реляционное отображение |
Лицензия | Лицензия Apache 2.0 |
Веб-сайт | MSDN |
Обзор
Entity Framework - это набор технологий в ADO.NET, который поддерживает разработку программных приложений, ориентированных на данные. Архитекторы и разработчики приложений, ориентированных на данные, обычно боролись с необходимостью достижения двух очень разных целей. Они должны моделировать сущности, отношения и логику бизнес-задач, которые они решают, а также должны работать с механизмами данных, используемыми для хранения и извлечения данных. Данные могут охватывать несколько систем хранения, каждая со своими собственными протоколами; даже приложения, которые работают с одной системой хранения, должны сбалансировать требования системы хранения с требованиями написания эффективного и поддерживаемого кода приложения. Эта проблема обычно упоминается как « несоответствие объектно-относительного импеданса ». [ необходима цитата ]
Многие инструменты объектно-реляционного сопоставления (ORM) (также известные как «объектно-реляционные менеджеры») были разработаны, чтобы позволить разработчикам работать с данными в форме предметно-зависимых объектов и свойств, таких как клиенты и адреса клиентов, не беспокоясь сами с базовыми таблицами базы данных и столбцами, в которых хранятся эти данные. С ORM разработчики могут работать на более высоком уровне абстракции, когда они имеют дело с данными, и могут создавать и поддерживать приложения, ориентированные на данные, с меньшим количеством кода, чем в традиционных приложениях. Entity Framework - это ORM-решение, которое в настоящее время продвигается для использования в стеке разработки Microsoft. [4]
История
Первая версия Entity Framework (EFv1) была включена в .NET Framework 3.5 Service Pack 1 и Visual Studio 2008 Service Pack 1, выпущенные 11 августа 2008 г. . Эта версия была широко раскритикована, и даже был получен вотум недоверия, подписанный не менее чем тысячей разработчиков. [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 License 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 License v2 и полностью создается на GitHub . Хотя Entity Framework Core 1.0 имеет некоторые концептуальные сходства с предыдущими версиями Entity Framework, это полностью новая кодовая база, разработанная, чтобы быть более эффективной, мощной, гибкой и расширяемой, будет работать в Windows, Linux и OSX и будет поддерживать новый диапазон реляционных хранилищ данных и хранилищ данных NOSQL. [12]
Entity Framework Core 2.0 был выпущен 14 августа 2017 г. [15]
вместе с Visual Studio 2017 15.3 и ASP.NET Core 2.0Entity Framework Core 3.0 был выпущен 23 сентября 2019 г. [16]
вместе с Visual Studio 2019 16.3 и ASP.NET Core 3.0,Entity Framework Core 3.1 (EF Core 3.1) был официально выпущен для использования в производственной среде 3 декабря 2019 г. [17] [18]
и будет предпочтительной долгосрочной поддерживаемой версией как минимум до 3 декабря 2022 года.Самая последняя версия Entity Framework Core 5.0.2 (EF Core 5) была выпущена для производственного использования 12 января 2021 года [19] [20]
.Архитектура
Архитектура 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.
- Веб-сервисы , которые предоставляют сущности как веб-сервисы.
- Сервисы высокого уровня , такие как сервисы отчетов, которые работают с сущностями, а не с реляционными данными.
Модель данных сущности
Модель Entity Data Model ( EDM ) определяет концептуальную модель (CSDL) данных с использованием метода моделирования, который сам называется Entity Data Model, расширенной версией модели сущности-отношения . [21] Модель данных в первую очередь описывает Сущности и Ассоциации, в которых они участвуют. Схема EDM выражается на языке определения схемы (SDL), который представляет собой приложение XML (расширенный язык разметки). Кроме того, также необходимо указать отображение (MSL) элементов концептуальной схемы (CSDL) в схему хранения (SSDL). Спецификация отображения также выражается в XML. [22]
Visual Studio также предоставляет Entity Designer для визуального создания EDM и спецификации сопоставления. Результатом работы инструмента является XML-файл (* .edmx), в котором указана схема и сопоставление. Файл Edmx содержит артефакты метаданных EF (содержимое CSDL / MSL / SSDL). Эти три файла (csdl, msl, ssdl) также можно создавать или редактировать вручную. [ необходима цитата ]
Картография
Мастер Entity Data Model Wizard [23] в Visual Studio в большинстве случаев изначально генерирует взаимно-однозначное (1: 1) сопоставление между схемой базы данных и концептуальной схемой. В реляционной схеме элементы состоят из таблиц, при этом первичный и внешний ключи склеивают связанные таблицы. Напротив, типы сущностей определяют концептуальную схему данных. [ необходима цитата ]
Типы сущностей представляют собой совокупность полей с несколькими типами - каждое поле сопоставляется с определенным столбцом в базе данных - и могут содержать информацию из нескольких физических таблиц. Типы сущностей могут быть связаны друг с другом независимо от отношений в физической схеме. Связанные сущности также отображаются аналогичным образом - через поле, имя которого обозначает отношение, в котором они участвуют и к которому они обращаются, которое вместо извлечения значения из некоторого столбца в базе данных просматривает взаимосвязь и возвращает сущность (или набор сущностей) с который связан. [ необходима цитата ]
Типы сущностей образуют класс объектов, которым соответствуют сущности, причем сущности являются экземплярами типов сущностей. Сущности представляют собой отдельные объекты, которые составляют часть проблемы, решаемой приложением, и индексируются с помощью ключа. Например, преобразовав физическую схему, описанную выше, мы получим два типа сущностей:
- CustomerEntity , который содержит имя клиента из Customers таблицы и адрес клиента из контактов таблицы.
- OrderEntity , который инкапсулирует заказы определенного клиента, извлекая его из таблицы Orders .
Логическая схема и ее сопоставление с физической схемой представлены как модель данных сущности (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, который используется при сериализации сущностей для постоянного хранения или передачи по сети. [24]
Сущности
Сущности ** являются экземплярами EntityType s; они представляют собой отдельные экземпляры объектов (таких как заказчик , заказы ), к которым относится информация. Идентичность сущности определяется типом сущности, экземпляром которого она является; в этом смысле тип сущности определяет класс, к которому принадлежит сущность, а также определяет, какие свойства сущность будет иметь. Свойства описывают некоторые аспекты сущности, давая ей имя и тип. Свойства типа сущности в ADO.NET Entity Framework полностью типизированы и полностью совместимы с системой типов, используемой в системе СУБД, а также с системой общих типов .NET Framework. Свойство может быть SimpleType или ComplexType , а также может быть многозначным. Все EntityType принадлежат некоторому пространству имен и имеют свойство EntityKey, которое однозначно идентифицирует каждый экземпляр типа сущности. Различные типы собственности различаются следующим образом: [ необходима ссылка ]
- SimpleType соответствует примитивным типам данных, таким как целые числа , символы и числа с плавающей запятой . [25]
- ComplexType - это совокупность нескольких свойств типа SimpleType или ComplexType . В отличие от EntityType s, однако, ComplexTypes может не иметь EntityKey . В Entity Framework v1 ComplexTypes нельзя наследовать. [26]
Все экземпляры сущностей размещаются в EntityContainers, которые являются контейнерами для каждого проекта для сущностей. Каждый проект имеет один или несколько именованных EntityContainers, которые могут ссылаться на сущности в нескольких пространствах имен и типах сущностей. Несколько экземпляров одного типа сущности могут храниться в коллекциях, называемых EntitySets. Один тип сущности может иметь несколько EntitySet. [ необходима цитата ]
Примитивные типы EDM (простые типы): [25] [27]
Тип EDM | Сопоставление типов CLR |
---|---|
Edm.Binary | Байт[] |
Эдм Булан | Логический |
Эдм.Байт | Байт |
Edm.DateTime | DateTime |
Edm.DateTimeOffset | DateTimeOffset |
Edm.Decimal | Десятичный |
Эдм. Двойной | Двойной |
Edm.Guid | Гид |
Edm.Int16 | Int16 |
Edm.Int32 | Int32 |
Edm.Int64 | Int64 |
Edm.SByte | SByte |
Эдм. Сингл | Одинокий |
Edm.String | Нить |
Эдм. Время | Промежуток времени |
Отношения
Любые два типа сущностей могут быть связаны либо отношением ассоциации , либо отношением содержания . Например, отгрузка , выставляемая клиенту, является ассоциацией, тогда как заказ, содержащий детали заказа, является отношением сдерживания. Отношение включения также можно использовать для моделирования наследования между сущностями. Связь между двумя типами сущностей определяется типом отношения , экземпляры которого, называемые отношениями , связывают экземпляры сущности. В будущих выпусках могут быть представлены другие типы отношений, такие как Состав или Идентификация . [ необходима цитата ]
Типы отношений характеризуются своей степенью (арностью) или количеством типов сущностей, которые они связывают, и их множественностью. Однако в первоначальном выпуске ADO.NET Entity Framework отношения ограничиваются двоичными (второй степени) двунаправленными отношениями. Кратность определяет, сколько экземпляров сущностей можно связать вместе. В зависимости от множественности отношения могут быть «один к одному», «один ко многим» или «многие ко многим». Именованы отношения между сущностями; имя называется Роль. Он определяет цель отношений. [ необходима цитата ]
С типом отношения также может быть связана операция или действие , что позволяет выполнять некоторые действия над сущностью в случае выполнения действия над связанной сущностью. Отношение может быть указано для выполнения действия, когда некоторая операция выполняется для связанной сущности. Например, при удалении объекта, составляющего часть отношения ( операция OnDelete ), могут быть предприняты следующие действия: [28]
- 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 ] КЛЮЧ propertyName [, propertyName ] * {( propertyName PropertyType [ PropertyFacet ] * ) + } PropertyType :: = (( PrimitiveType [ PrimitiveTypeFacets ] * ) | ( complexTypeName ) | RowType PropertyFacet :: = ( [ NULLABLE true | false ] | [ DEFAULT defaultVal ] | [ МНОЖЕСТВЕННОСТЬ [ 1 | * ] ] ) PropertyTypeFacet :: = MAXLENGTH | PRECISION | ШКАЛА | UNICODE | FIXEDLENGTH | COLLATION | DATETIMEKIND | PRESERVESECONDS PrimitiveType :: = BINARY | STRING | БУЛЕВЫ | SINGLE | DOUBLE | DECIMAL | GUID | BYTE | SBYTE | INT16 | INT32 | INT64 | DATETIME | DATETIMEOFFSET | TIME )
Фасеты используются для описания метаданных свойства, например, является ли оно допускающим значение NULL или имеет значение по умолчанию, а также мощность свойства, т. Е. Является ли свойство однозначным или многозначным. Кратность «1» означает однозначное свойство; «*» означает, что это многозначная собственность. Например, объект может быть обозначен в SDL как: [29]
Name = "Addr" > Name = "Street" Type = "String" Nullable = "false" /> Name = "City" Type = "String" Nullable = "false" /> < Имя свойства = "Country" Type = "String" Nullable = "false" /> Name = "PostalCode" Type = "Int32" /> Name = "Customer" > Name = "Электронная почта " /> Name = " Name " Type = " String " /> Name = " Email " Type = " String " Nullable = " false " /> Name = " Address " Type = " Адрес " />
Тип отношения определяется как указание конечных точек и их кратностей. Например, отношение «один ко многим» между клиентом и заказами можно определить как
Name = "CustomerAndOrders" > Type = "Customer" Multiplicity = "1" /> Type = "Orders" Multiplicity = "*" > Action = "Cascade" />
Запрос данных
Сущность 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 ResultSet. [ необходима цитата ]
Entity SQL улучшает SQL, добавляя встроенную поддержку для: [ необходима ссылка ]
- Типы , поскольку сущности ADO.NET полностью типизированы.
- EntitySets , которые рассматриваются как коллекции сущностей.
- Возможность компоновки , которая снимает ограничения на использование подзапросов.
Канонические функции Entity SQL
Канонические функции поддерживаются всеми поставщиками данных, совместимыми с Entity Framework. Их можно использовать в запросе Entity SQL. Кроме того, большинство методов расширения в LINQ to Entities транслируются в канонические функции. Они не зависят от какой-либо конкретной базы данных. Когда поставщик данных ADO.NET получает функцию, он преобразует ее в желаемый оператор SQL. [30]
Но не все СУБД обладают эквивалентной функциональностью и набором стандартных встроенных функций. Также есть отличия в точности расчетов. Следовательно, не все канонические функции поддерживаются для всех баз данных, и не все канонические функции возвращают одинаковые результаты. [ необходима цитата ]
Группа | Канонические функции [30] |
---|---|
Агрегатные функции | Среднее, 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 к классу ObjectContext были добавлены новые методы ExecuteStoreQuery () и ExecuteStoreCommand () . [ необходима цитата ]
Визуализаторы
В Visual Studio есть функция, которая называется Visualizer. Запрос LINQ, написанный в Visual Studio, можно рассматривать как собственный SQL с помощью визуализатора во время сеанса отладки. Визуализатор для LINQ to Entities (объектный запрос), ориентированный на все СУБД, доступен в «VisualStudioGallery». [31]
Профилировщик Entity Framework
Entity Framework Profiler - это инструмент объектно-реляционного сопоставления (ORM), который устраняет проблемы с производительностью в приложении ASP.NET с помощью Entity Framework. Он сканирует на предмет общих неэффективных запросов к базе данных, таких как проблема SELECT N + 1. [32]
Смотрите также
- Список программ объектно-реляционного сопоставления
- LINQ to SQL
- .NET Persistence API (NPA)
Рекомендации
- ^ "Выпуски · dotnet / ef6 · GitHub" .
- ^ «Релизы · dotnet / efcore · GitHub» .
- ^ Криль, Пол (20 июля 2012 г.). «Microsoft Open-Source Entity Framework» . InfoWorld . Проверено 24 июля 2012 .
- ^ https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/ef/overview
- ^ ADO .NET Entity Framework: вотум недоверия
- ^ «Обновление Entity Framework в .NET 4 и Visual Studio 2010» . Блог команды ADO.NET. 11 мая 2009 года в архив с оригинала на 20 января 2010 года . Проверено 1 ноября 2011 года .
- ^ «EF4.3.1 и EF5 Beta 1 доступны в NuGet» . Блог команды ADO.NET. 29 февраля 2012 года в архив с оригинала на 25 марта 2012 года . Проверено 27 марта 2012 года .
- ^ «EF5 доступен на CodePlex» . 11 августа 2012 г.
- ^ «Доступен EF6 RTM» . 17 октября, 2013. Архивировано из оригинала на 2014-03-30.
- ^ «Entity Framework - Главная» . 14 сентября 2016 г.
- ^ «История версий EF» .
- ^ а б «EF7 - Новые платформы, новые хранилища данных» . 19 мая, 2014. Архивировано из оригинала на 2015-09-29.
- ^ «Доступен Entity Framework Core 1.0.0» . 27 июня 2016 г.
- ^ Гензельман, Скотт. «ASP.NET 5 мертв - представляем ASP.NET Core 1.0 и .NET Core 1.0 - Скотт Хансельман» . www.hanselman.com . Проверено 11 июля 2016 .
- ^ «Представляем .NET Core 2.0» . Блог .NET. 14 августа 2017.
- ^ «Представляем .NET Core 3.0» . Блог .NET. 23 сентября 2019.
- ^ https://docs.microsoft.com/en-us/ef/core/what-is-new/
- ^ https://www.nuget.org/packages/Microsoft.EntityFrameworkCore
- ^ https://docs.microsoft.com/en-us/ef/core/what-is-new/
- ^ https://www.nuget.org/packages/Microsoft.EntityFrameworkCore
- ^ «Модель данных сущности» . MSDN, Microsoft. 2 августа 2012 . Проверено 15 августа 2013 года .
- ^ CSDL, SSDL и MSL Specifications , MSDN , заархивировано из оригинала 08.11.2010 , получено 06.12.2010
- ^ Мастер модели данных сущности , MSDN , получено 06 декабря 2010 г.
- ^ Kogent Solutions Inc. (2009), Черная книга ASP.NET 3.5 , Dreamtech Press, ISBN 978-81-7722-831-1
- ^ а б Простые типы (EDM) , MSDN , получено 06 декабря 2010 г.
- ^ Элемент ComplexType (CSDL) , MSDN , получено 06 декабря 2010 г.
- ^ Типы концептуальных моделей , MSDN , получено 06 декабря 2010 г.
- ^ Элемент OnDelete (CSDL) , MSDN , извлекаются 2010-12-06
- ^ Facets (CSDL) , MSDN , получено 06 декабря 2010 г.
- ^ а б Канонические функции (Entity SQL) , MSDN , получено 29 марта 2010 г.
- ^ VisualStudioGallery
- ^ «Профилировщик Entity Framework» . hibernatingrhinos.com . Спящие носороги . Источник 2021-05-12 .
Библиография
- Ли, Крейг (14 июня 2010 г.), ADO.NET Entity Framework Unleashed (1-е изд.), Sams , стр. 600, ISBN 978-0-672-33074-2, Архивируются с оригинала на 1 октября 2012 года
- Лерман, Джулия (август 2010 г.), Programming Entity Framework (2-е изд.), O'Reilly Media , стр. 912, ISBN 978-0-596-80726-9
- Дженнингс, Роджер (3 февраля 2009 г.), Professional ADO.NET 3.5 с LINQ и Entity Framework (1-е изд.), Wrox , стр. 672, ISBN 978-0-470-18261-1, Архивируются с оригинала на 2012-10-10 , извлекаться 2010-02-06
- Мостарда, Стефано (декабрь 2010 г.), Entity Framework 4.0 в действии (1-е изд.), Manning Publications , стр. 450, ISBN 978-1-935182-18-4
Внешние ссылки
- Платформа ADO.NET Entity Framework (в Центре разработчиков данных)
- Исходный код Entity Framework версии 6, размещенный на GitHub
- EntityFramework на GitHub