Поделиться через


Планирование для Entity Framework Core 6.0

Важный

EF Core 6.0 уже выпущен. Эта страница остается исторической записью плана.

Как описано в процессе планирования , мы собрали входные данные от заинтересованных лиц в план выпуска Entity Framework Core (EF Core) 6.0. Этот план периодически обновляется, чтобы отразить корректировки расписания и области.

В отличие от предыдущих выпусков, этот план не пытается покрыть всю работу для выпуска 6.0. Вместо этого он показывает, куда и как мы планируем вкладывать в этот выпуск, с гибкостью для настройки масштаба или включения новой работы по мере получения отзывов и обучения в процессе работы над выпуском.

Важный

Этот план не является обязательством. Это отправная точка, которая будет развиваться, как мы узнаем больше. Некоторые вещи, которые в настоящее время не запланированы на 6.0, могут быть добавлены. Некоторые вещи, которые в настоящее время запланированы на 6.0, могут быть отложены.

Общие сведения

Номер версии и дата выпуска

EF Core 6.0 является следующим выпуском после EF Core 5.0 и в настоящее время запланирован на выпуск в ноябре 2021 года в то же время, что и .NET 6.

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

Для EF Core 6.0 требуется .NET 6. EF Core 6.0 не нацелен на какую-либо версию .NET Standard; дополнительную информацию см. в будущем .NET Standard.

EF Core 6.0 не будет работать в .NET Framework.

EF Core 6.0 будет соответствовать .NET 6 в качестве долгосрочной поддержки (LTS).

Разрушающие изменения

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

Темы

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

Высоко запрошенные функции

Как всегда, основной вклад в процесс планирования поступает из голосования (👍) за функции наGitHub. Для EF Core 6.0 мы планируем использовать следующие высоко запрошенные функции:

Темпоральные таблицы SQL Server

Отслеживается #4693

Состояние: завершено

Размер футболки: большой

Темпоральные таблицы поддерживают запросы к данным, хранящимся в таблице в любой момент времени, в отличие от обычных таблиц, где содержатся только последние сохраненные данные. EF Core 6.0 позволяет создавать темпоральные таблицы с помощью миграций, а также разрешать доступ к данным с помощью запросов LINQ.

Эта работа изначально ограничивается тем, что описано в вопросе , а именно. Мы можем привлечь дополнительные ресурсы, основываясь на отзывах в период выпуска.

Столбцы JSON

Отслеживается #4021

Состояние: вырезано

Размер футболки: средний

Эта функция представляет общий механизм и шаблоны поддержки JSON, которые могут быть реализованы любым поставщиком базы данных. Мы будем работать с сообществом, чтобы выровнять существующие реализации для Npgsql и Pomelo MySQL, а также добавить поддержку SQL Server и SQLite.

ColumnAttribute.Order

Отслеживается #10059

Состояние: В процессе

Размер футболки: небольшой

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

Производительность

Хотя EF Core, как правило, быстрее EF6, по-прежнему существуют области, в которых возможны значительные улучшения производительности. Мы планируем заняться несколькими из этих областей в EF Core 6.0, а также улучшить нашу инфраструктуру производительности и тестирование.

Эта тема будет включать много итеративного исследования, которое будет информировать о том, где мы сосредоточим ресурсы. Мы планируем начать с:

Инфраструктура производительности и новые тесты

Состояние: определено/завершено

Размер футболки: средний

База кода EF Core уже содержит набор тестов производительности, выполняемых каждый день. Для версии 6.0 мы планируем улучшить инфраструктуру для этих тестов, а также добавить новые тесты. Мы также будем профилировать основные сценарии производительности и устранять любые легко решаемые задачи.

Обновление. Мы улучшили инфраструктуру тестирования и добавили новые тесты для поддержки работы EF Core 6. Дополнительные улучшения в этой области не вошли в выпуск EF Core 6.0.

Скомпилированные модели

Отслеживается #1906

Состояние: завершено

Размер футболки: X-Large

Скомпилированные модели позволяют создать скомпилированную форму модели EF. Это обеспечит как улучшение производительности при запуске, так и общую лучшую производительность при обращении к модели.

TechEmpower Fortunes

Отслеживается #23611

Состояние: завершено

Размер футболки: X-Large

Мы запускали отраслевые стандартные TechEmpower тесты на платформе .NET с использованием базы данных PostgreSQL на протяжении нескольких лет. Бенчмарк Fortunes особенно релевантен для сценариев EF. У нас есть несколько вариантов этого теста, в том числе:

  • Реализация, использующая ADO.NET напрямую. Это самая быстрая реализация трех перечисленных здесь.
  • Реализация, использующая Dapper. Это медленнее, чем использование ADO.NET напрямую, но все еще быстро.
  • Реализация, использующая EF Core. В настоящее время это самая медленная реализация трех.

Цель EF Core 6.0 — добиться, чтобы производительность соответствовала Dapper на тесте TechEmpower Fortunes. Это значительный вызов, но мы сделаем все возможное, чтобы приблизиться настолько, насколько это возможно.

Компоновщик/AOT

Отслеживается #10963

Состояние: определено/завершено

Размер футболки: средний

EF Core выполняет большие объемы создания кода среды выполнения. Это представляет сложность для моделей приложений, которые зависят от удаления неиспользуемого кода компоновщиком, таких как .NET MAUI и Blazor, и платформ, которая не допускает динамическую компиляцию, такие как iOS. Мы будем продолжать исследовать это пространство в рамках EF Core 6.0 и внести целевые улучшения, как мы можем. Однако мы не ожидаем полностью закрыть разрыв в рамках версии 6.0.

Миграция и развертывание

После исследований, выполненных для EF Core 5.0, мы планируем внедрить улучшенную поддержку управления миграцией и развертывания баз данных. К ним относятся две основные области:

Пакеты миграций

Отслеживается #19693

Состояние: завершено

Размер футболки: средний

Пакет миграций — это автономный исполняемый файл, который применяет миграцию к рабочей базе данных. Поведение будет соответствовать dotnet ef database update, но должно упростить развертывание SSH/Docker/PowerShell, так как все необходимое содержится в одном исполняемом файле.

Управление миграцией

Отслеживается #22945

Состояние: вырезано

Размер футболки: большой

Количество миграций, созданных для приложения, может стать обременительным. Кроме того, эти миграции часто развертываются с приложением, даже если это не требуется. В EF Core 6.0 мы планируем улучшить это с помощью улучшения средств и управления проектами и сборками. Двумя конкретными проблемами, которые мы планируем решить, являются объединить много миграций в одну и повторно создать чистый снимок модели.

Обновление: большая часть работы в этой области была сокращена для версии 6.0 из-за ограничений ресурсов.

Улучшение существующих функций и исправление ошибок

Все проблемы или ошибки, назначенные на веху 6.0.0, в настоящее время планируются для этого выпуска. Это включает в себя множество небольших улучшений и исправлений ошибок.

Равенство запросов EF6

Проблемы под номером , помеченные как 'ef6-parity' и относящиеся к контрольной точке 6.0.

Состояние: в пределах области действия/завершено

Размер футболки: большой

EF Core 5.0 поддерживает большинство шаблонов запросов, поддерживаемых EF6, помимо шаблонов, которые не поддерживаются в EF6. Для EF Core 6.0 мы планируем закрыть разрыв и сделать поддерживаемые запросы EF Core истинным супермножеством поддерживаемых запросов EF6. Это будет обусловлено исследованием пробелов, но уже включает проблемы GroupBy, такие как перевод GroupBy, а затем FirstOrDefault, а также необработанные запросы SQL для примитивных и несопоставленных типов.

Обновление: Удаление необработанных SQL-запросов для примитивных и несопоставленных типов из версии 6.0 было вызвано ограничениями ресурсов и корректировкой приоритетов.

Объекты-значения

Отслеживается #9906

Статус: вырезано

Размер футболки: средний

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

Эта работа изначально подразумевает включение преобразователей значений , которые сопоставляются с несколькими столбцами. Мы можем привлечь дополнительную поддержку на основе отзывов во время релиза.

Поставщик базы данных Azure Cosmos DB

Отслеживаемые проблемы, помеченные как "area-cosmos" и относящиеся к вехе 6.0

Состояние: расширено и завершено

Размер футболки: большой

Мы активно собираем отзывы о том, какие улучшения нужно внедрить в поставщик Azure Cosmos DB для EF Core 6.0. Мы обновим этот документ, как мы узнаем больше. Теперь обязательно проголосуйте (👍) за необходимые функции Azure Cosmos DB.

Обновление: Мы занимались обширным изучением потребностей клиентов вокруг провайдера Azure Cosmos DB. Это привело к тому, что следующие улучшения были включены в EF Core 6.0:

Обновление: из выпуска 6.0 были сокращены следующие проблемы:

Обеспечение доступа приложениям к соглашениям о построении моделей

Отслеживается #214

Статус: вырезан

Размер футболки: средний

EF Core использует набор соглашений для создания модели из типов .NET. Эти соглашения в настоящее время контролируются поставщиком базы данных. В EF Core 6.0 мы намерены разрешить приложениям подключаться к этим соглашениям и изменять их.

Нулевой баланс ошибок (ZBB)

Отслеживаемые проблемы под номером , помеченные меткой type-bug для вехи 6.0

Состояние: В процессе/Определение области

Размер футболки: большой

Мы планируем устранить все нерешённые ошибки в период EF Core 6.0. Некоторые вещи, которые следует учитывать:

  • Это особенно относится к проблемам с метками типа 'ошибка' и.
  • Будут исключения, например, когда ошибка требует изменения дизайна или новой функции для правильного исправления. Эти проблемы будут помечены меткой blocked.
  • При необходимости мы будем откладывать исправление ошибок в зависимости от риска, как это обычно бывает перед выпуском версий GA/RTM.

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

Проблемы , отслеживаемые и помеченные type-enhancement в рамках вехи 6.0

Состояние: завершено

Размер футболки: большой

Другие функции, запланированные для EF 6.0, включают, но не ограничиваются следующими:

Обновление: из выпуска 6.0 были сокращены следующие проблемы:

Интеграция .NET

Команда EF Core также работает над несколькими связанными, но независимыми технологиями. В частности, мы планируем работать над:

Усовершенствования System.Data

Отслеживаемые проблемы в dotnet\rruntime репозитории, помеченные area-System.Data в вехе 6.0.

Состояние: определено/завершено

Размер футболки: большой

Эта работа включает:

  • Реализация нового API пакетной обработки .
  • Продолжайте работу с другими командами .NET и сообществом, чтобы понять и развивать ADO.NET.

Обновление: из выпуска 6.0 были сокращены следующие проблемы:

Усовершенствования Microsoft.Data.Sqlite

Отслеживаемые проблемы , помеченные type-enhancement и area-adonet-sqlite в вехе 6.0

Состояние: область действия или завершение

Размер футболки: средний

Для Microsoft.Data.Sqlite планируется несколько небольших улучшений, включая пул соединений и подготовленные выражения для повышения производительности.

Обновление: подготовленные выражения были исключены из выпуска 6.0.

Ссылочные типы, допускающие значение NULL

Отслеживается #14150

Состояние: завершено

Размер футболки: большой

Мы заметим код EF Core для использования ссылочных типов, допускающих значение NULL,.

Эксперименты и исследования

Команда EF планирует инвестировать время в течение периода разработки EF Core 6.0, экспериментируя и исследуя в двух областях. Это процесс обучения, и поэтому для версии 6.0 не планируется конкретных результатов.

SqlServer.Core

Отслеживалась в репозитории лаборатории данных .NET

Статус: в процессе

Размер футболки: В процессе определения

Microsoft.Data.SqlClient — это полнофункциональный поставщик баз данных ADO.NET для SQL Server. Он поддерживает широкий спектр функций SQL Server как в .NET Core, так и в .NET Framework. Однако это также большая и старая база кода с множеством сложных взаимодействий между его поведением. Это затрудняет изучение потенциальных выгод, которые можно сделать с помощью новых функций .NET Core. Поэтому мы начинаем эксперимент в сотрудничестве с сообществом, чтобы определить, какой потенциал существует для высокопроизводительного драйвера SQL Server для .NET.

Важный

Инвестиции в Microsoft.Data.SqlClient не изменяются. Это будет по-прежнему рекомендуемый способ подключения к SQL Server и SQL Azure, как с EF Core, так и без него. Она будет продолжать поддерживать новые функции SQL Server по мере их внедрения.

GraphQL

Состояние: в процессе

Размер футболки: В процессе

GraphQL набирает тягу за последние несколько лет на различных платформах. Мы планируем исследовать пространство и найти способы улучшения взаимодействия с .NET. Это будет связано с работой сообщества по пониманию и поддержке существующей экосистемы. Он также может включать конкретные инвестиции от Корпорации Майкрософт, либо в виде вклада в существующую работу, либо в разработке бесплатных частей в Microsoft Stack.

DataVerse (прежнее название — Common Data Services)

Состояние: в процессе

Размер футболки: Текущий

DataVerse — это хранилище данных на основе столбцов, предназначенное для быстрого разработки бизнес-приложений. Он автоматически обрабатывает сложные типы данных, такие как двоичные объекты (BLOB) и имеет встроенные сущности и связи, такие как организации и контакты. Пакет SDK существует, но разработчики могут воспользоваться поставщиком EF Core для использования расширенных запросов LINQ, использовать единицу работы и иметь согласованный API доступа к данным. Команда рассмотрит различные способы улучшения опыта разработчиков .NET при подключении к DataVerse.

Ниже черты отсечения

Проблемы , отслеживаемые по меткам consider-for-current-release

Это исправления ошибок и улучшения, которые не запланированы для выпуска 6.0, но мы рассмотрим их, учитывая отзывы на протяжении всего релиза, вместе с прогрессом, достигнутым в работе выше. Эти проблемы могут быть включены в EF Core 6.0 и автоматически могут стать кандидатами для следующего выпуска.

Кроме того, мы всегда учитываем самые популярные вопросы при планировании. Сокращение любой из этих проблем из релиза всегда болезненно, но нам нужен реалистичный план с учетом имеющихся ресурсов. Убедитесь, что вы проголосовали (👍) за необходимые функции.

Предложения

Ваши отзывы о планировании важны. Лучший способ указать важность проблемы заключается в голосовании (👍) для этой проблемы на GitHub. Затем эти данные будут передаваться в процесс планирования для следующего выпуска.