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

Важно!

Версия EF Core 6.0 уже выпущена. На этой странице будет храниться архивная версия плана.

Как было описано в процессе планирования, мы объединили полученные от заинтересованных лиц сведения в план для выпуска Entity Framework Core (EF Core) 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

Состояние: ведутся работы

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

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

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

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

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

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

Состояние: ограничено или выполнено

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

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

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

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

Отслеживается по проблеме № 1906

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

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

Благодаря скомпилированным моделям станет возможным создание скомпилированной формы модели EF. Это позволит повысить высокую производительность при запуске, а также общую производительность доступа к модели.

Тесты TechEmpower Fortunes

Отслеживается по проблеме № 23611

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

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

На протяжении нескольких лет мы проводим соответствующие отраслевым стандартам тесты производительности TechEmpower для .NET в отношении базы данных PostgreSQL. Для сценариев EF в наибольшей степени подходит тест Fortunes. Мы применяем несколько разновидностей этого теста, включая следующие.

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

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

Компоновщик или компиляция AOT

Отслеживается по проблеме № 10963

Состояние: ограничено или выполнено

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

EF Core создает большой объем кода во время выполнения. Это может стать проблемой для моделей приложений, которые зависят от встряхивания дерева компоновщика, таких как Xamarin и 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 мы планируем оптимизировать использование объектов значений в рамках проблемно-ориентированного проектирования. Этот подход будет основываться на преобразователях значений, а не на принадлежащих сущностях.

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

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

Отслеживается с помощью проблем с меткой area-cosmos в вехе 6.0

Состояние: "Развернуто" или "Завершено"

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

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

Обновление. Мы осуществляем обширную разработку для клиентов в отношении поставщика Cosmos. В результате в EF Core 6.0 были включены приведенные ниже улучшения.

Обновление. В выпуске 6.0 были устранены приведенные ниже проблемы.

Предоставление приложениям доступа к соглашениям о построении модели

Отслеживается по проблеме № 214

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

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

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

Отсутствие ошибок

Отслеживается с помощью проблем с меткой в вехе 6.0

Состояние: выполняется/ограничено

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

Мы планируем устранить все нерешенные ошибки во время работы над выпуском EF Core 6.0. Важные аспекты

  • Это относится к проблемам с меткой type-bug.
  • Будут определены исключения, например ошибки, для устранения которых требуется изменение проекта или реализация новой функции. Такие проблемы получат метку blocked.
  • При необходимости по мере приближения выхода общедоступной версии или RTM-выпуска мы будем прекращать работу над некоторыми ошибками с учетом связанной с ними степени риска.

Прочие функции

Отслеживается с помощью проблем с меткой в вехе 6.0

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

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

В EF 6.0 планируется включить ряд прочих функций, в том числе следующие.

Обновление. В выпуске 6.0 были устранены приведенные ниже проблемы.

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

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

Улучшения в System.Data

Отслеживается с помощью проблем в репозитории dotnet\runtime с меткой в вехе 6.0

Состояние: ограничено или выполнено

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

В этом направлении будут вестись следующие работы.

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

Обновление. В выпуске 6.0 были устранены приведенные ниже проблемы.

Улучшения в Microsoft.Data.Sqlite

Отслеживается с помощью проблем с метками и 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. Эта задача предполагает взаимодействие с сообществом в вопросах понимания и поддержки существующей экосистемы. Корпорация Майкрософт может участвовать в этом процессе посредством вклада в существующие наработки или разработки бесплатных компонентов для стека Майкрософт.

DataVerse (ранее — Common Data Services)

Состояние: ведутся работы

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

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

Сопутствующие вопросы

Отслеживание с помощью вопроса, отмеченного

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

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

Предложения

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