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


План для Entity Framework Core 5.0

Важный

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

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

Важный

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

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

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

EF Core 5.0 запланирован на выпуск в то же время, что и .NET 5.0. Выбрана версия "5.0" для выравнивания с .NET 5.0.

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

EF Core 5.0 планируется запустить на любой платформе .NET Standard 2.1, включая .NET 5.0. Это часть более широкого сближения платформ с .NET Core.

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

Критические изменения

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

Ожидается, что будут некоторые критические изменения для поставщиков баз данных, особенно в связи с поддержкой TPT. Однако мы ожидаем, что работа по обновлению поставщика для версии 5.0 будет меньше, чем требуется для обновления 3.0.

Темы

Мы извлекли несколько основных областей или тем, которые будут формировать основу для крупных инвестиций в EF Core 5.0.

Полностью прозрачное сопоставление "многие ко многим" по соглашению

Ведущие разработчики: @smitpatel, @AndriySvyrydи @lajones

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

Размер футболки: L

Состояние: Готово

Многие-ко-многим — это самая востребованная функция (~506 голосов) в списке задач GitHub.

Поддержка связей "многие ко многим" может быть разделена на три основные области:

  • Пропустить свойства навигации, охватываемые следующей темой.
  • Типы сущностей property-bag. Они позволяют использовать стандартный тип CLR (например, Dictionary) для экземпляров сущностей, таким образом, чтобы явный тип CLR не использовался для каждого типа сущности. Отслеживается #9914.
  • Сахар для легкой настройки связей "многие ко многим".

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

Свойства навигации "многие ко многим" (также известные как "пропускаемые навигации")

Ведущие разработчики: @smitpatel и @AndriySvyryd

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

Размер футболки: L

Состояние: Готово

Как описано в первой теме, поддержка "многие ко многим" имеет несколько аспектов. Эта тема специально отслеживает использование переходов с пропуском. Мы считаем, что наиболее значимым препятствием для тех, кто хочет иметь поддержку связи "многие ко многим", является невозможность использовать "естественные" связи в бизнес-логике, например, в запросах, без ссылки на таблицу соединения. Тип сущности таблицы соединения по-прежнему может существовать, но не должен мешать бизнес-логике.

Сопоставление наследования по таблице для каждого типа (TPT)

Ведущий разработчик: @AndriySvyryd и @smitpatel

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

Размер футболки: XL

Состояние: Готово

Мы реализуем TPT, поскольку это как востребованная функция (~289 голосов; 3-е место в общем зачете), так и потому что она требует некоторых низкоуровневых изменений, которые мы считаем подходящими для базовой природы общего плана .NET 5. Мы ожидаем, что это приведет к критическим изменениям для поставщиков баз данных, хотя они должны быть гораздо менее серьезными, чем изменения, необходимые для 3.0.

Отфильтрованное включение

Ведущий разработчик: @maumar

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

Размер футболки: M

Состояние: Готово

Отфильтрованное включение — это часто запрашиваемая функция (около 376 голосов; 2-е место в общем зачете), которая не требует большого объема работы, и мы считаем, что она разблокирует или упростит множество сценариев, для которых в настоящее время требуются фильтры на уровне модели или более сложные запросы.

Разделённое включение

Ведущий разработчик: @smitpatel

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

Размер футболки: L

Состояние: Готово

EF Core 3.0 изменил поведение по умолчанию, чтобы создать один SQL-запрос для заданного запроса LINQ. Это привело к значительной регрессии производительности запросов, использующих Include для нескольких коллекций.

В EF Core 5.0 мы сохраняем новое поведение по умолчанию. Однако EF Core 5.0 теперь позволит создавать несколько запросов для коллекций Includes, где использование одного запроса приводит к плохой производительности.

Обязательные зависимые от одного к одному

Ведущие разработчики: @AndriySvyryd и @smitpatel

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

Размер футболки: M

Состояние: Готово

В EF Core 3.0 все зависимые типы, включая собственные типы, являются необязательными (например, Person.Address может иметь значение NULL). В EF Core 5.0 зависимости можно настроить по мере необходимости.

Рационализировать ToTable, ToQuery, ToView, FromSql и т. д.

Ведущие разработчики: @AndriySvyryd и @smitpatel

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

Размер футболки: L

Состояние: Готово

В предыдущих выпусках мы добились прогресса в поддержке необработанного SQL, безключевых типов и связанных областей. Однако есть как пробелы, так и несоответствия в том, как все работает вместе в целом. Цель 5.0 заключается в том, чтобы исправить их и создать хороший интерфейс для определения, миграции и использования различных типов сущностей и связанных с ними запросов и артефактов базы данных. Это также может включать обновления в скомпилированный API запросов.

Обратите внимание, что этот элемент может привести к некоторым критическим изменениям на уровне приложений, так как некоторые из функций, которые у нас сейчас есть, слишком позволительные, что может быстро привести к неудачам. Скорее всего, мы будем блокировать некоторые из этих функций вместе с рекомендациями по тому, что делать.

Общие улучшения запросов

Ведущие разработчики: @smitpatel и @maumar

Отслеживаемые проблемы, помеченные area-query в вехе 5.0

Размер футболки: XL

Состояние: Готово

Код перевода запросов был широко перезаписан для EF Core 3.0. Код запроса обычно находится в гораздо более надежном состоянии из-за этого. Для версии 5.0 мы не планируем вносить крупные изменения в запросы, кроме тех, которые необходимы для поддержки TPT и обхода свойств навигации. Однако для устранения некоторых технических долгов, оставшихся от капитальных ремонтных работ 3,0, все еще требуется значительная работа. Мы также планируем устранить множество ошибок и реализовать небольшие улучшения, чтобы улучшить общий интерфейс запросов.

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

Ведущие разработчики: @bricelam

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

Размер футболки: L

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

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

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

  • Несколько потоков, процессов и серверов могут пытаться одновременно перенести базу данных
  • Приложения могут попытаться получить доступ к несогласованному состоянию в это время.
  • Обычно разрешения базы данных для изменения схемы не должны быть предоставлены для выполнения приложения.
  • Трудно вернуться к чистому состоянию, если что-то идет не так

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

  • Работа в Linux, Mac и Windows
  • Будьте успешным пользователем командной строки
  • Сценарии поддержки с контейнерами
  • Работа с часто используемыми средствами и потоками развертывания в реальном мире
  • Интеграция как минимум в Visual Studio

Результатом, скорее всего, будет много небольших улучшений в EF Core (например, лучшие миграции на SQLite), а также рекомендации и долгосрочное сотрудничество с другими командами для улучшения комплексных возможностей, которые выходят за рамки EF.

Интерфейс платформ EF Core

Ведущие разработчики: @roji и @bricelam

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

Размер футболки: L

Статус: Область выполнения/Готово

Определение области. Руководство и примеры платформы публикуются для Blazor, Xamarin, WinForms и WPF. Xamarin и другие работы AOT/компоновщика теперь планируются для EF Core 6.0.

Важный

Xamarin.Android, Xamarin.iOS, Xamarin.Mac теперь интегрированы непосредственно в .NET (начиная с .NET 6) в качестве .NET для Android, .NET для iOS и .NET для macOS. Если вы создаете эти типы проектов сегодня, они должны быть обновлены до проектов в стиле пакета SDK для .NET для продолжения поддержки. Дополнительные сведения об обновлении проектов Xamarin до .NET см. в документации по обновлению с Xamarin до .NET & .NET MAUI.

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

  • Blazor
  • Xamarin, включая использование сценария AOT/линкера
  • WinForms/WPF/WinUI и, возможно, другие платформы U.I.

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

Конкретные области, которые мы планируем рассмотреть, являются:

  • Развертывание, включая интерфейс использования средств EF, таких как миграция
  • Модели приложений, включая Xamarin и Blazor, и, вероятно, другие
  • Возможности SQLite, включая пространственные интерфейсы и перестроение таблиц
  • AOT и связывание опытов
  • Интеграция диагностики, включая счетчики perf

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

Ведущий разработчик: @roji

Проблемы , помеченные area-perf, отслеживаемые в рамках вехи 5.0

Размер футболки: L

Состояние: В работе/Готово

Определение области. Основные улучшения производительности в поставщике Npgsql завершены. Теперь для EF Core 6.0 запланирована дополнительная работа по производительности.

Для EF Core мы планируем улучшить набор тестов производительности и повысить производительность среды выполнения. Кроме того, мы планируем завершить новый API пакетной обработки ADO.NET, прототип которого был создан во время цикла выпуска 3.0. Кроме того, на уровне ADO.NET мы планируем дополнительные улучшения производительности поставщика Npgsql.

В рамках этой работы мы также планируем добавить счетчики производительности ADO.NET/EF Core и другие диагностические инструменты по мере необходимости.

Документация по архитектуре и вкладу

Ведущий документатор: @ajcvickers

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

Размер футболки: L

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

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

  • Способствуйте разработке кода EF Core
  • Создание поставщиков баз данных
  • Создание других расширений

Обновление: К сожалению, этот план был слишком амбициозным. Мы все еще считаем, что это важно, но, к сожалению, это не войдет в релиз EF Core 5.0.

Документация по Microsoft.Data.Sqlite

Ведущий документатор: @bricelam

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

Размер футболки: M

Состояние: завершено. Новая документация доступна на Microsoft Learn.

Команда EF также владеет поставщиком ADO.NET Microsoft.Data.Sqlite. Мы планируем полноценно оформить документацию для этого провайдера в версии 5.0.

Общая документация

Ведущий документатор: @ajcvickers

Отслеживаются проблемы в репозитории документации, относящиеся к вехе 5.0.

Размер футболки: L

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

Мы уже в процессе обновления документации по выпускам 3.0 и 3.1. Мы также работаем над:

  • Переработка вводных статей, чтобы сделать их более доступными и легкими для восприятия.
  • Реорганизация статей для упрощения поиска и добавления перекрестных ссылок
  • Добавление дополнительных сведений и уточнений в существующие статьи
  • Обновление примеров и добавление дополнительных примеров

Исправление ошибок

Отслеживаемые проблемы, помеченные type-bug в вехе 5.0

Разработчики: @roji, @maumar, @bricelam, @smitpatel, @AndriySvyryd, @ajcvickers

Размер футболки: L

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

На момент написания у нас есть 135 ошибок, которые будут исправлены в выпуске 5.0 (из них 62 уже исправлены), но существует значительное совпадение в улучшениях выше, касающихся общего запроса .

Входящий показатель (проблемы, которые в конечном итоге решаются в рамках вехи) составлял около 23 проблем в месяц в период выпуска 3.0. Не все из них должны быть исправлены в версии 5.0. В качестве грубой оценки мы планируем устранить дополнительные 150 проблем в версии 5.0.

Небольшие улучшения

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

Разработчики: @roji, @maumar, @bricelam, @smitpatel, @AndriySvyryd, @ajcvickers

Размер футболки: L

Состояние: Готово

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

Ниже строки

Отслеживаются по проблемам , помеченным consider-for-next-release

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

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

Предложения

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