Интеграция 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.