Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Начиная с EF 9, вы можете использовать задачу MSBuild для создания скомпилированной модели и предварительно скомпилированных запросов автоматически при создании проекта или публикации. Это главным образом предназначено для использования с публикацией NativeAOT.
Предупреждение
Поддержка NativeAOT и интеграция MSBuild являются экспериментальными функциями и пока не подходят для использования в рабочей среде.
Установка задач
Чтобы приступить к работе, установите Майкрософт. EntityFrameworkCore.Tasks пакет NuGet. Рассмотрим пример.
dotnet add package Microsoft.EntityFrameworkCore.Tasks
Примечание.
Каждый проект, который необходимо скомпилировать с созданными файлами, должен ссылаться на пакет NuGet, он по умолчанию не является транзитивным.
Использование задач
Если проект указывает <PublishAot>true</PublishAot> , то по умолчанию задача MSBuild создаст скомпилированную модель и предварительно скомпилированные запросы во время публикации. В противном случае можно задать следующие свойства для управления поведением генерации:
| Свойство MSBuild | Описание |
|---|---|
| EFOptimizeContext | Установите значение true, чтобы включить интеграцию MSBuild.
Только EF Core 9-10; удален в EF Core 11. |
| 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). |
Примечание.
Начиная с EF Core 11, EFOptimizeContext свойство было удалено. Свойства EFScaffoldModelStage и EFPrecompileQueriesStage теперь работают независимо и не требуют дополнительного флага активации.
Ограничения
- При использовании интеграции на стадии
publishтакже задайте rid в проекте запуска (например, "<RuntimeIdentifier>win-x64</RuntimeIdentifier>"). - Другой запускаемый проект нельзя указать при использовании этого подхода, так как это приведет к обратной зависимости сборки. Это означает, что проект контекста должен быть самодостаточен с точки зрения конфигурации, поэтому если приложение обычно настраивает контекст с помощью host builder в другом проекте, следует реализовать IDesignTimeDbContextFactory<TContext> в контекстном проекте.
- Так как проект должен быть скомпилирован до создания скомпилированной модели, этот подход не поддерживает реализации частичных методов для настройки скомпилированной модели.
- В настоящее время это всегда создает дополнительный код в скомпилированной модели, которая требуется для NativeAOT. Если вы не планируете включить NativeAOT, создайте скомпилированную модель с помощью средств CLI.