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