ADO.NET Entity Framework
ADO.NET Entity Framework — открытая система объектно-реляционного отображения (ORM) для ADO.NET, изначально распространявшаяся как неотъемлемая часть .NET Framework, а начиная с версии Entity Framework 6.0 поставляется отдельно от .NET Framework[1].
Классический фреймворк, известный как Entity Framework 6 (EF6), находится в режиме поддержки: его активная разработка прекращена, и выпускаются только исправления безопасности[2]. Последней версией является 6.5.1, выпущенная 17 июня 2024 года[3].
В 2016 году был представлен современный кросс-платформенный преемник — Entity Framework Core (EF Core), который активно развивается и является основной ORM-технологией Microsoft для новых приложений[2]. Последняя стабильная версия — 9.0 (выпущена в ноябре 2024 года)[4], а выпуск версии 10.0 запланирован на ноябрь 2025 года[5].
Общие сведения
| ADO.NET Entity Framework | |||
|---|---|---|---|
| Тип | Объектно-реляционное отображение | ||
| Автор | Microsoft | ||
| Разработчик | .NET Foundation | ||
| Написана на | C# | ||
| Интерфейс | Нет (библиотека классов) | ||
| Операционные системы | Windows, Linux, macOS | ||
| Языки интерфейса | Английский | ||
| Первый выпуск | 11 августа 2008 | ||
| Последняя версия |
(Entity Framework 6: 17 июня 2024 Entity Framework Core: ноябрь 2025) |
||
| Кандидат в релизы | EF Core: 10.0.0-rc.2 (18 октября 2025) | ||
| Репозиторий |
https://github.com/dotnet/efcore github.com/dotnet/ef6<br… |
||
| |||
| |||
| Состояние |
Активное (EF Core) Поддерживается (EF6) |
||
| Лицензия | Apache License 2.0 | ||
| Сайт | learn.microsoft.com/en-u… | ||
Обзор
Entity Framework представляет собой набор технологий в рамках ADO.NET, предназначенных для разработки программных приложений, ориентированных на работу с данными. Разработчикам подобных приложений приходится решать две разные задачи: определять объекты предметной области, их связи и бизнес-логику, а также взаимодействовать с системами хранения данных, имеющими собственные протоколы. Часто это приводит к необходимости согласовывать требования хранилищ с требованиями к архитектуре системы, что известно как «объектно-реляционное несоответствие» (object-relational impedance mismatch)[6].
Для решения таких задач были созданы различные системы ORM, позволяющие разрабатывать код, оперируя объектами и их свойствами (например, «Клиент» и «Адрес клиента») вместо прямой работы с таблицами и столбцами базы данных. ORM-подход увеличивает уровень абстракции и позволяет создавать и поддерживать приложения с меньшими затратами кода. В экосистеме Microsoft решение ORM представлено именно Entity Framework[7].
Entity Framework является технологией для серверной части приложения (backend) и не имеет собственного пользовательского интерфейса[8]. Он функционирует как часть внутренней логики приложения, невидимой для конечного пользователя[9], и может использоваться для создания программ с любым типом интерфейса: веб-приложений (например, ASP.NET), настольных (WPF, Windows Forms) или консольных[8][10]. Во всех этих случаях фреймворк служит мостом между бизнес-логикой и базой данных, в то время как за взаимодействие с пользователем отвечают другие технологии[9].
Текущий статус и развитие
На сегодняшний день пути развития классического Entity Framework и его преемника Entity Framework Core (EF Core) кардинально различаются. Entity Framework Core является флагманской технологией доступа к данным от Microsoft, находится в состоянии активной разработки и позиционируется как основная ORM-система для всех новых приложений на платформе .NET[11]. EF Core — это легковесный, кросс-платформенный и расширяемый фреймворк с открытым исходным кодом[12]. Он постоянно обновляется, получая новые функции и улучшения производительности, а мажорные версии выходят ежегодно вместе с новыми версиями .NET[11]. Например, были выпущены EF Core 8 и EF Core 9, которые привнесли значительные улучшения[13]. Microsoft публикует дорожную карту развития, согласно которой следующий стабильный релиз, EF Core 10.0, запланирован на ноябрь 2025 года. Жизненный цикл поддержки EF Core соответствует политике поддержки .NET и включает выпуски со стандартной (STS) и долгосрочной (LTS) поддержкой[14].
В свою очередь, классический ADO.NET Entity Framework (последняя основная версия — 6.x, также известный как EF6) больше не находится в активной разработке и переведён в режим поддержки. Его кодовая база считается стабильной, и добавление новых функций в него прекращено. Выпускаются только исправления, устраняющие критические уязвимости в системе безопасности. EF6 следует «Современной политике жизненного цикла» (Modern Lifecycle Policy), согласно которой поддерживается только самая последняя выпущенная версия пакета, а все предыдущие (6.0, 6.1, 6.2, 6.3, 6.4) больше не поддерживаются. Microsoft настоятельно рекомендует использовать Entity Framework Core для всех новых приложений, а также для существующих, находящихся в активной разработке[11]. При этом EF6 остаётся рабочим решением для унаследованных (legacy) проектов, тесно связанных с .NET Framework[15].
История
Entity Framework (EF6 и ранее)
Первая версия Entity Framework (EFv1) была выпущена в составе .NET Framework 3.5 Service Pack 1 и Visual Studio 2008 Service Pack 1 11 августа 2008 года. Она подверглась широкой критике, получив даже «вотум недоверия» от более тысячи разработчиков.
Вторая версия — Entity Framework 4.0 (EFv4) — появилась 12 апреля 2010 года в составе .NET 4.0 и исправила множество недостатков первой версии.
Версии 4.1 (12 апреля 2011 года) и 4.3.1 (29 февраля 2012 года) добавили поддержку подходов Code First и миграций соответственно.
Версия 5.0.0 появилась 11 августа 2012 года для .NET Framework 4.5.
Версия 6.0 была опубликована 17 октября 2013 года и стала открытым проектом под лицензией Apache License v2. В последующие годы вышли ключевые обновления: 6.1 (март 2014), 6.2 (октябрь 2017)[16]. Важным этапом стала версия 6.3 (октябрь 2019), которая обеспечила поддержку .NET Core 3.0, а версия 6.4 (декабрь 2019) стабилизировала эту функциональность[17]. Последним выпуском стала версия 6.5.1 от 17 июня 2024 года, которая исправила ошибку в пакете NuGet версии 6.5.0[3].
Entity Framework Core
В связи с переходом .NET на кроссплатформенную модель следующая версия Entity Framework создавалась с нуля. 27 июня 2016 года вышла Entity Framework Core 1.0 (изначально именовалась EF7), параллельно с релизами ASP.NET Core 1.0 и .NET Core 1.0. Переименование подчеркнуло, что это совершенно другой код, не заменяющий EF6[18].
Последующие мажорные версии выходили ежегодно в соответствии с графиком выпуска .NET:
- EF Core 2.0 — 14 августа 2017 года[19].
- EF Core 3.0 — 23 сентября 2019 года[20]. Версия 3.1 (3 декабря 2019) стала выпуском с долгосрочной поддержкой (LTS).
- EF Core 5.0 — 10 ноября 2020 года. Его поддержка завершилась 10 мая 2022 года[5].
- EF Core 6.0 — 10 ноября 2021 года, версия с долгосрочной поддержкой (LTS)[5].
- EF Core 7.0 — 8 ноября 2022 года[21]. Поддержка этой версии прекратилась 14 мая 2024 года[2].
- EF Core 8.0 — 14 ноября 2023 года, версия с долгосрочной поддержкой (LTS)[22].
- EF Core 9.0 — ноябрь 2024 года[4].
- EF Core 10.0 — выпуск запланирован на ноябрь 2025 года[5].
Сравнение с Entity Framework 6
Entity Framework Core (EF Core) не является прямым продолжением Entity Framework 6 (EF6), а представляет собой полностью переписанный фреймворк с фундаментальными архитектурными отличиями. EF Core был создан с нуля как легковесная, модульная и кросс-платформенная система, ориентированная на современные приложения, в то время как EF6 остаётся зрелым решением для унаследованных систем на базе .NET Framework[23][24].
| Характеристика | Entity Framework 6 (EF6) | Entity Framework Core (EF Core) |
|---|---|---|
| Платформа | .NET Framework (преимущественно Windows)[25] | .NET (кросс-платформенный: Windows, Linux, macOS)[25] |
| Архитектура | Монолитная, тесно интегрирована с .NET Framework | Модульная, расширяемая, зависимости поставляются как NuGet-пакеты[25] |
| Производительность | Стабильная, но в ряде сценариев уступает EF Core | Значительно выше за счёт оптимизаций[25][26] |
| Подходы к разработке | Поддерживает Database First, Model First (через .edmx-файлы) и Code First[27] | Ориентирован на Code First; поддержка .edmx отсутствует[28] |
| Конфигурация | XML-файлы (`App.config`, `Web.config`), EDMX-дизайнер[29] | В коде (Fluent API), файлы `appsettings.json`[30] |
| Локализация сообщений | Зависит от языковых пакетов .NET Framework[16] | В основном на английском; локализация выполняется средствами приложения (например, `IStringLocalizer`)[31] |
Платформа и архитектура. Ключевое архитектурное отличие — кросс-платформенность EF Core, который работает на .NET и поддерживает Windows, macOS и Linux[32]. В отличие от него, EF6 исторически был привязан к .NET Framework и Windows, хотя начиная с версии 6.3 получил поддержку .NET Core[17]. EF Core имеет модульную архитектуру: провайдеры баз данных и другие компоненты поставляются как отдельные NuGet-пакеты, что уменьшает размер приложения и упрощает поддержку[25]. Архитектура EF6, напротив, более монолитна и тесно интегрирована в .NET Framework[23].
Подходы к разработке и конфигурация. EF6 поддерживает несколько подходов к разработке, включая визуальный дизайнер моделей на основе XML-файлов формата `.edmx`, содержащих CSDL, SSDL и MSL-секции[33]. EF Core полностью отказался от этого подхода в пользу «Code First», где модель данных и её конфигурация определяются исключительно в коде C# с помощью Fluent API[28]. Соответственно, изменились и способы конфигурации: вместо XML-файлов `App.config`/`Web.config` в EF Core преимущественно используются файлы `appsettings.json` и стандартные механизмы конфигурации .NET[30].
Производительность и функциональность. Производительность была одним из главных приоритетов при разработке EF Core. Благодаря оптимизированному выполнению запросов, улучшенному кэшированию и пакетной обработке команд, EF Core в большинстве сценариев работает значительно быстрее, чем EF6[26][27]. Кроме того, EF Core активно развивается и включает уникальные возможности, отсутствующие в EF6, такие как теневые свойства (Shadow Properties), глобальные фильтры запросов (Global Query Filters) и механизм переиспользования контекстов баз данных (DbContext Pooling)[24].
Архитектура
Архитектура классического ADO.NET Entity Framework (EF6 и более ранних версий) представляет собой многокомпонентную систему, которая функционирует как мост между объектно-ориентированным кодом приложения и реляционной базой данных. Вместо единого «движка» фреймворк состоит из нескольких ключевых частей: модели данных сущностей (Entity Data Model, EDM), которая определяет концептуальную модель, модель хранения и их сопоставление; служб объектов (Object Services), отвечающих за преобразование данных в объекты (материализацию) и отслеживание их изменений; EntityClient, который преобразует запросы (например, LINQ) в деревья команд; и провайдеров данных ADO.NET, которые транслируют эти команды в SQL и выполняют их в конкретной СУБД[34][35].
Стек архитектуры, представленный на схеме, включает следующие уровни (снизу вверх):
- Провайдеры БД, реализующие абстракции ADO.NET для работы с концептуальной схемой.
- Провайдер сопоставления (map provider), переводящий деревья команд Entity SQL в язык SQL конкретной СУБД; включает store-specific bridge для кастомизации конкретного движка.
- Парсер EDM и отображение представлений: разбирает спецификацию модели и сопоставляет её с реляционной схемой, формируя проекции данных.
- Pipeline выполнения запросов и обновлений — обрабатывает запросы и преобразует их в стандартные команды, далее — в запросы конкретной СУБД.
- Метаданные — обслуживает информацию о сущностях, связях и сопоставлениях.
- Транзакции — обеспечивает работу с транзакциями на уровне хранилища; при отсутствии поддержки реализуется на этом уровне.
- API концептуального уровня — реализует программную модель доступа к данным через Connection, Command и возвращаемые EntityResultSets/EntitySets.
- Отключённые компоненты — локальное кэширование данных для офлайн режима.
- Встроенная БД для клиентского кэширования и запросов к реляционным данным.
- Инструменты проектирования (Mapping Designer) — облегчает создание сопоставлений между схемами.
- Программный уровень:
- Object Services — автогенерирует код CLR-классов с соответствующими свойствами для работы с сущностями как с .NET-объектами.
- Веб-сервисы — публикация сущностей через веб-протоколы.
- Высокоуровневые сервисы, например — построение отчётов на уровне сущностей.
Entity Data Model
Entity Data Model (EDM) определяет концептуальную модель (CSDL) данных, основанную на расширенном варианте ER-диаграмм и стандартизованную в схеме XML (SDL). В модели выделяются «Сущности» и ассоциации; сопоставление элементов концептуальной схемы (CSDL) и схемы хранения (SSDL) также выражается на XML[36].
В Visual Studio имеется Entity Designer, поддерживающий графическое проектирование EDM и сопоставлений между слоями (модель Model First; альтернативы — Code First и Database First). Выходной файл (*.edmx) хранит всё описание и может быть создан или отредактирован вручную. Подход Model First не поддерживается в EF Core[37].
Сопоставление (mapping)
Мастер EDM в Visual Studio обычно строит однозначное сопоставление между реляционной и концептуальной схемой. В реляционной схеме элементы представлены таблицами с первичными и внешними ключами; в концептуальной — сущностями с полями и типами, которые могут агрегировать данные из разных таблиц. Связи между сущностями могут быть другими по сравнению со связями на физическом уровне: обращение к такой связи может возвращать не значение столбца, а коллекцию связанных объектов.
Entity Types определяют класс объектов (CustomerEntity, OrderEntity и т. д.); экземпляры этих классов — сущности. Entity Framework позволяет работать с такими объектами, а внутренне реализует все необходимые объединения таблиц и обновления данных. Для запросов используется язык eSQL (расширение SQL, учитывающее особенности концептуальной модели)[38].
Схема EDM и соответствие задаются на XML; при изменении сущности определяется, какие таблицы должны быть обновлены, и формируются нужные SQL-запросы.
Сущности
Сущностью (entity) в EDM называется экземпляр EntityType — то есть отдельный объект (например, конкретный «заказ» или «клиент»). EntityType задаёт принадлежность объекта к классу и набор его свойств (property). Свойства полностью типизированы и совместимы с системой типов DBMS и CLR. Property может быть SimpleType, ComplexType или многозначным. Все сущности хранятся в EntityContainer-объектах (один проект может содержать несколько контейнеров, включающих множество EntitySet для каждого типа).
Примитивные типы EDM (SimpleType):
| Тип 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 | Single |
| Edm.String | String |
| Edm.Time | TimeSpan |
Связи
Любые два типа сущностей могут быть связаны ассоциацией или включением (containment). Например, «отгрузка выставляется клиенту» — ассоциация; «заказ содержит детали» — включение. Тип отношения (Relationship Type) определяет его структуру, степень (arity), кратность (один-к-одному, один-ко-многим, многие-ко-многим) и поведение при операциях (например, Cascade при удалении). Названия ролей (Role) определяют смысл связи.
В будущих версиях допускается появление новых видов связей (например, композиций).
Язык определения схемы
Для задания EDM используется XML-подобный язык SDL (Schema Definition Language), определяющий как примитивные, так и сложные типы, коллекции и пр. Пример (отрывок на XML):
<ComplexType Name="Addr">
<Property Name="Street" Type="String" Nullable="false" />
<Property Name="City" Type="String" Nullable="false" />
<Property Name="Country" Type="String" Nullable="false" />
<Property Name="PostalCode" Type="Int32" />
</ComplexType>
<EntityType Name="Customer">
<Key>
<PropertyRef Name="Email" />
</Key>
<Property Name="Name" Type="String" />
<Property Name="Email" Type="String" Nullable="false" />
<Property Name="Address" Type="Addr" />
</EntityType>
Пример отношения (ассоциации один-ко-многим):
<Association Name="CustomerAndOrders">
<End Type="Customer" Multiplicity="1" />
<End Type="Orders" Multiplicity="*">
<OnDelete Action="Cascade" />
</End>
</Association>
Запросы к данным
Entity SQL
ADO.NET Entity Framework использует диалект SQL под названием Entity SQL, ориентированный на декларативные запросы и обновления на уровне сущностей и связей (без явных JOIN). Для работы с концептуальной моделью применяется провайдер EntityClient, принимающий запрос на Entity SQL и преобразующий его в дерево команд, далее адаптируемое к SQL-подмножества конкретной БД.
Entity SQL поддерживает:
- Полные типы (type-safety)
- EntitySets как коллекции сущностей
- Компонуемость (возможность встраивания подзапросов на любом уровне)
Канонические функции Entity SQL
Все провайдеры EF поддерживают так называемые канонические функции, их можно применять напрямую в запросах Entity SQL (или автоматически — через LINQ to Entities). Перечень зависит от поддержки СУБД и может отличаться по точности и составу.
| Группа | Канонические функции |
|---|---|
| Агрегатные функции | Avg, BigCount, Count, Max, Min, StDev, StDevP, Sum, Var, VarP |
| Математические функции | Abs, Ceiling, Floor, Power, Round, Truncate |
| Строковые функции | 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, Day, 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. Реализовано множество специфических провайдеров для разных серверов баз данных.
Натуральный SQL
Начиная с Entity Framework v4, в ObjectContext появились методы ExecuteStoreQuery() и ExecuteStoreCommand() для выполнения произвольных SQL-запросов и команд.
Визуализаторы
Среда Visual Studio поддерживает визуализацию запросов LINQ: при отладке можно увидеть исходный запрос в виде SQL. Для LINQ to Entities существует отдельный визуализатор, доступный в Visual Studio Marketplace[39].
Профилирование производительности
Существует множество коммерческих профилировщиков для анализа производительности приложений на Entity Framework (EF и EF Core).
Инструменты и расширения
Примечания
- ↑ Krill, Paul. Microsoft open-sources Entity Framework (англ.) (20 July 2012). Архивировано 15 октября 2012 года. Дата обращения: 24 июля 2012.
- ↑ 1 2 3 Entity Framework Support Policies. Microsoft Learn. Дата обращения: 3 ноября 2025.
- ↑ 1 2 Releases · dotnet/ef6. GitHub. Дата обращения: 3 ноября 2025.
- ↑ 1 2 What's New in EF Core 9. Microsoft Learn. Дата обращения: 3 ноября 2025.
- ↑ 1 2 3 4 What's New in Entity Framework Core. Microsoft Learn. Дата обращения: 3 ноября 2025.
- ↑ The Object-Relational Impedance Mismatch (англ.). AgileData.org. Дата обращения: 12 декабря 2022. Архивировано 2 февраля 2003 года.
- ↑ mcleblanc Entity Framework Overview - ADO.NET (амер. англ.). learn.microsoft.com (15 сентября 2021). Дата обращения: 12 декабря 2022. Архивировано 24 августа 2025 года.
- ↑ 1 2 Общие сведения об Entity Framework - ADO.NET. Microsoft Learn. Дата обращения: 3 ноября 2025.
- ↑ 1 2 Frontend и Backend разработка: в чем разница? iampm.club. Дата обращения: 3 ноября 2025.
- ↑ Как мы в Сбере разрабатываем консольные приложения на .NET. Habr (20 февраля 2023). Дата обращения: 3 ноября 2025.
- ↑ 1 2 3 Политики поддержки Entity Framework. Microsoft Learn. Дата обращения: 3 ноября 2025.
- ↑ Что такое Entity Framework Core. Microsoft Learn. Дата обращения: 3 ноября 2025.
- ↑ Новые возможности EF Core 9. Microsoft Learn. Дата обращения: 3 ноября 2025.
- ↑ Политика поддержки .NET и .NET Core. Microsoft. Дата обращения: 3 ноября 2025.
- ↑ План для Entity Framework Core 6.0. Microsoft Learn. Дата обращения: 3 ноября 2025.
- ↑ 1 2 Past Releases of Entity Framework. Microsoft Learn. Дата обращения: 3 ноября 2025.
- ↑ 1 2 Новые возможности в EF6. Microsoft Learn. Дата обращения: 3 ноября 2025.
- ↑ Hanselman, Scott ASP.NET 5 is dead - Introducing ASP.NET Core 1.0 and .NET Core 1.0 - Scott Hanselman. www.hanselman.com. Дата обращения: 11 июля 2016. Архивировано 20 января 2016 года.
- ↑ Announcing .NET Core 2.0. .NET Blog (14 августа 2017). Архивировано 14 августа 2017 года.
- ↑ Announcing .NET Core 3.0. .NET Blog (23 сентября 2019). Архивировано 22 июня 2025 года.
- ↑ Roth, Daniel Announcing ASP.NET Core in .NET 7 (амер. англ.). .NET Blog (8 ноября 2022). Дата обращения: 12 декабря 2022. Архивировано 17 июня 2025 года.
- ↑ Arthur, Vickers Entity Framework Core 8 (EF8) is available today (амер. англ.). .NET Blog (14 ноября 2023). Дата обращения: 14 ноября 2023. Архивировано 15 июня 2025 года.
- ↑ 1 2 What Is Entity Framework Core And How Is It Different From EF6? C-sharpcorner.com. Дата обращения: 3 ноября 2025.
- ↑ 1 2 EF Core & EF6. Microsoft Learn. Дата обращения: 3 ноября 2025.
- ↑ 1 2 3 4 5 Understand the Key Difference between Entity Framework Core and Entity Framework. DEV Community. Дата обращения: 3 ноября 2025.
- ↑ 1 2 Entity Framework Performance. treefish.uk. Дата обращения: 3 ноября 2025.
- ↑ 1 2 EF Core vs EF 6: Which Entity Framework Should You Choose for Your Project? MoldStud. Дата обращения: 3 ноября 2025.
- ↑ 1 2 EF Core: почему отказ от EDMX — это хорошо. Habr (19 мая 2020). Дата обращения: 3 ноября 2025.
- ↑ Файл конфигурации — EF6. Microsoft Learn. Дата обращения: 3 ноября 2025.
- ↑ 1 2 Connection Strings - EF Core. Microsoft Learn. Дата обращения: 3 ноября 2025.
- ↑ Глобализация и локализация в ASP.NET Core. Microsoft Learn. Дата обращения: 3 ноября 2025.
- ↑ Руководство по Entity Framework Core. Metanit. Дата обращения: 3 ноября 2025.
- ↑ Entity Data Model (EDMX) Files. Actian. Дата обращения: 3 ноября 2025.
- ↑ Entity Framework - Архитектура. CoderLessons.com. Дата обращения: 3 ноября 2025.
- ↑ Архитектура ADO.NET Entity Framework. Professorweb.ru. Дата обращения: 3 ноября 2025.
- ↑ Entity Data Model. MSDN, Microsoft (2 августа 2012). Дата обращения: 15 августа 2013. Архивировано 6 августа 2012 года.
- ↑ ajcvickers Porting from EF6 to EF Core - Porting an EDMX-Based Model - EF (амер. англ.). learn.microsoft.com (9 марта 2022). Дата обращения: 7 июня 2024. Архивировано 16 июля 2024 года.
- ↑ Kogent Solutions Inc. ASP.NET 3.5 Black Book. — Dreamtech Press, 2009. — ISBN 978-81-7722-831-1.
- ↑ Linq to Entity query visualizer - Visual Studio Marketplace (амер. англ.). marketplace.visualstudio.com. Дата обращения: 12 декабря 2022. Архивировано 24 марта 2025 года.
- ↑ ErikEJ Tools & Extensions - EF Core (амер. англ.). learn.microsoft.com. Дата обращения: 12 декабря 2022. Архивировано 9 октября 2025 года.
- ↑ ajcvickers Tools & Extensions - EF6 (амер. англ.). learn.microsoft.com (9 марта 2022). Дата обращения: 12 декабря 2022. Архивировано 12 декабря 2022 года.
Литература
- Lee, Craig. ADO.NET Entity Framework Unleashed. — 1-е. — Sams, 14 июня 2010. — P. 600. — ISBN 978-0-672-33074-2.
- Lerman, Julia. Programming Entity Framework. — 2-е. — O'Reilly Media, август 2010. — P. 912. — ISBN 978-0-596-80726-9.
- Jennings, Roger. Professional ADO.NET 3.5 with LINQ and the Entity Framework. — 1-е. — Wrox, 3 февраля 2009. — P. 672. — ISBN 978-0-470-18261-1.
- Mostarda, Stefano. Entity Framework 4.0 in Action. — 1-е. — Manning Publications, декабрь 2010. — P. 450. — ISBN 978-1-935182-18-4.