Сравнение 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. Однако в настоящее время в EF Core реализованы не все функции EF6.

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

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

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

Компонент EF6.4 EF Core
Сопоставление базовых классов Да 1.0
Конструкторы с параметрами 2.1
Преобразования значений свойств 2.1
Сопоставленные типы без ключей (типы запросов) 2.1
Соглашения Да 1.0
Соглашения об именовании Да 7.0
Аннотирование данных Да 1.0
Текучий 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
Миграции Да 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. Эти функции зависят от базовых EDM EF6 и (или) являются сложными функциями с относительно низкой рентабельностью инвестиций. Мы всегда приветствуем обратную связь, но несмотря на то, что EF Core предоставляет многие функции, недоступные в EF6, для EF Core, наоборот, невозможно поддерживать все функции EF6.

2 Поставщики баз данных, реализованные сторонними производителями, могут запаздывать с обновлением до новых основных версий 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. Дополнительные сведения см. в разделе Реализации .NET, поддерживаемые EF Core.

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 также часто выполняется для повышения производительности. Однако не все сценарии работают быстрее, поэтому сначала сделайте профилирование.

Дополнительные сведения см. в разделе Porting from EF6 to EF Core (Перенос приложений из EF6 в EF).