Сравнение 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).