Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
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 ".