Сравнение EF Core и EF6

EF Core

Entity Framework Core (EF Core) — это современное средство сопоставления базы данных объектов для .NET. Он поддерживает запросы LINQ, отслеживание изменений, обновления и миграции схем.

EF Core работает с SQL Server/Базой данных SQL Azure, SQLite, Azure Cosmos DB, MySQL, PostgreSQL и множеством других баз данных с помощью модели подключаемого модуля поставщика баз данных.

EF6

Entity Framework 6 (EF6) — это объектно-реляционный маппер, предназначенный для .NET Framework, но с поддержкой .NET Core. EF6 является стабильным, поддерживаемым продуктом, но больше не разрабатывается.

Сравнение функций

EF Core предлагает новые функции, которые не будут реализованы в EF6. Однако не все функции EF6 в настоящее время реализованы в EF Core.

В следующих таблицах сравниваются функции, доступные в EF Core и EF6. Это высокоуровневое сравнение и не перечисляет каждую функцию или объясняет различия между одной и той же функцией в разных версиях EF.

Столбец EF Core указывает версию продукта, в которой впервые появилась функция.

Создание модели

Функция EF6.4 EF Core
Базовое сопоставление классов Да 1.0
Конструкторы с параметрами 2.1
Преобразования значений свойств 2.1
Сопоставленные типы без ключей 2.1
Conventions Да 1.0
Пользовательские соглашения Да 7.0
Заметки к данным Да 1.0
Fluent API Да 1.0
Наследование: таблица для каждой иерархии (TPH) Да 1.0
Наследование: таблица для каждого типа (TPT) Да 5.0
Наследование: таблица для каждого конкретного класса (TPC) Да 7.0
Свойства теневого состояния 1.0
Альтернативные ключи 1.0
Навигация "многие-ко-многим" Да 5.0
Много ко многим без сущности соединения Да 5.0
Создание ключей: база данных Да 1.0
Создание ключей: клиент 1.0
Сложные и принадлежащие типы Да 2.0
Пространственные данные Да 2,2
Формат модели: код Да 1.0
Создание модели из базы данных: командная строка Да 1.0
Обновление модели из базы данных Частично В бэклоге (#831)
Глобальные фильтры запросов 2.0
Разделение таблицы Да 2.0
Разделение сущностей Да 7.0
Сопоставление скалярных функций базы данных Плохо 2.0
Сопоставление табличных функций базы данных Плохо 5.0
Сопоставление полей 1.1
Ссылочные типы, допускающие значение NULL (C# 8.0) 3.0
Графическая визуализация модели Да Поддержка не запланирована (1)
Редактор графических моделей Да Поддержка не запланирована (1)
Формат модели: EDMX (XML) Да Поддержка не запланирована (1)
Создание модели из базы данных: мастер VS Да Поддержка не запланирована (1)

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

Функция EF6.4 EF Core
Запросы LINQ Да 1.0
Доступный для чтения созданный SQL Плохо 1.0
Перевод GroupBy Да 2.1
Загрузка связанных данных: Жадная загрузка Да 1.0
Загрузка связанных данных: жадная загрузка производных типов 2.1
Загрузка связанных данных: ленивый Да 2.1
Загрузка связанных данных: явная Да 1.1
Необработанные запросы SQL: типы сущностей Да 1.0
Необработанные запросы SQL: типы сущностей без ключей Да 2.1
Необработанные запросы SQL: создание с помощью LINQ 1.0
Явно компилированные запросы Плохо 2.0
await foreach (C# 8.0) 3.0
Язык запросов на основе текста (Entity SQL) Да Поддержка не запланирована (1)

Сохранение данных

Функция EF6.4 EF Core
Отслеживание изменений: моментальный снимок Да 1.0
Отслеживание изменений: уведомление Да 1.0
Отслеживание изменений: прокси-серверы Да 5.0
Доступ к отслеживаемому состоянию Да 1.0
Оптимистическая конкуренция Да 1.0
Транзакции Да 1.0
Пакетная обработка инструкций 1.0
Сопоставление хранимых процедур Да 7.0
API для несвязных графов низкого уровня Плохо 1.0
Несвязный граф сквозной 1.0 (частично; #5536)

Другие функции

Функция EF6.4 EF Core
Migrations Да 1.0
API создания и удаления базы данных Да 1.0
Начальные данные Да 2.1
Устойчивость подключения Да 1.1
Перехватчики Да 3.0
События Да 3.0 (частично; #626)
Простое ведение журнала (Database.Log) Да 5.0
Создание пулов DbContext 2.0

Поставщики баз данных (2)

Функция EF6.4 EF Core
SQL Server Да 1.0
MySQL Да 1.0
PostgreSQL Да 1.0
Oracle Да 1.0
SQLite Да 1.0
SQL Server Compact Да 1.0 (3)
DB2 Да 1.0
Firebird Да 2.0
Jet (Microsoft Access) 2.0 (3)
Azure Cosmos DB (облачная база данных) 3.0
В памяти (для тестирования) 1.0

1 Некоторые функции EF6 не будут реализованы в EF Core. Эти функции зависят от базовой модели данных сущностей EF6 (EDM) и (или) являются сложными функциями с относительно низкой отдачей от инвестиций. Мы всегда приветствуем отзывы, но хотя EF Core позволяет делать многое из того, что невозможно в EF6, он, напротив, не может поддерживать все функции EF6.

2 сторонние поставщики баз данных EF Core могут задерживаться с обновлением до новых основных версий EF Core. Дополнительные сведения см. в разделе "Поставщики баз данных ".

3 Поставщики SQL Server Compact и Jet работают только в .NET Framework (не в .NET Core).

Поддерживаемые платформы

EF Core 3.1 работает в .NET Core и .NET Framework с помощью .NET Standard 2.0. Однако EF Core 5.0 не работает в .NET Framework. Подробности см. в разделе Платформы.

EF6.4 выполняется на .NET Core и .NET Framework в многоцелевом режиме.

Руководство по новым приложениям

Используйте EF Core в .NET Core для всех новых приложений, если приложению не требуется что-то, что поддерживается только в .NET Framework.

Руководство по существующим приложениям EF6

EF Core не является заменой для EF6. Для перехода из EF6 в EF Core, скорее всего, потребуются изменения в приложении.

При перемещении приложения EF6 в .NET Core:

  • Продолжайте использовать EF6, если код доступа к данным стабильн и, скорее всего, не будет развиваться или нуждаться в новых функциях.
  • Перенос в EF Core, если код доступа к данным развивается или приложение нуждается в новых функциях, доступных только в EF Core.
  • Перенос в EF Core также часто выполняется для повышения производительности. Однако не все сценарии быстрее, поэтому сначала выполните профилирование.

Дополнительные сведения см. в статье "Перенос из EF6 в EF Core ".