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


Интеграция Entity Framework Core MSBuild

Начиная с EF 9, вы можете использовать задачу MSBuild для создания скомпилированной модели и предварительно скомпилированных запросов автоматически при создании проекта или публикации. Это в основном предназначено для использования с публикацией NativeAOT.

Предупреждение

Поддержка NativeAOT и интеграция MSBuild являются экспериментальными функциями и пока не подходят для использования в рабочей среде.

Установка задач

Чтобы приступить к работе, установите пакет NuGet Microsoft.EntityFrameworkCore.Tasks . Рассмотрим пример.

dotnet add package Microsoft.EntityFrameworkCore.Tasks

Примечание.

Каждый проект, который необходимо скомпилировать с созданными файлами, должен ссылаться на пакет NuGet, он по умолчанию не является транзитивным.

Использование задач

Если проект указывает <PublishAot>true</PublishAot> , то по умолчанию задача MSBuild создаст скомпилированную модель и предварительно скомпилированные запросы во время публикации. В противном случае можно задать следующие свойства для управления поведением создания:

Свойство MSBuild Description
EFOptimizeContext Установите для true включения интеграции MSBuild.
EFScaffoldModelStage publishЗадайте значение или build none укажите, на каком этапе будет создана скомпилированная модель. По умолчанию — publish.
EFPrecompileQueriesStage publishЗадайте значение или build none укажите, на каком этапе будут созданы предварительно скомпилированные запросы. По умолчанию — publish.
DbContextName DbContext Производный класс, используемый. Имя класса только или полное имя с пространствами имен. Если этот параметр не указан, EF Core выполнит создание всех классов контекста в проекте.
EFTargetNamespace Пространство имен, используемое для всех созданных классов. Если этот параметр не указан, EF Core будет использовать $(RootNamespace).
EFOutputDir Папка для отправки созданных файлов перед компиляцией проекта. Если этот параметр не указан, EF Core будет использовать $(IntermediateOutputPath).
EFNullable Будет ли использоваться ссылочный тип, допускающий значение NULL, в созданном коде. Если этот параметр не указан, EF Core будет использовать $(Nullable).

Ограничения

  • Другой запускаемый проект нельзя указать при использовании этого подхода, так как это приведет к обратной зависимости сборки. Это означает, что проект контекста должен быть автоматически настроен с точки зрения конфигурации, поэтому если приложение обычно настраивает контекст с помощью построителя узлов в другом проекте, необходимо реализовать IDesignTimeDbContextFactory TContexty<> в контекстном проекте.
  • Так как проект должен быть скомпилирован до создания скомпилированной модели, этот подход не поддерживает реализации частичных методов для настройки скомпилированной модели.
  • В настоящее время это всегда создает дополнительный код в скомпилированной модели, которая требуется для NativeAOT. Если вы не планируете включить NativeAOT, создайте скомпилированную модель с помощью средств CLI.

Дополнительные ресурсы