Службы времени разработки
Некоторые службы, используемые инструментами, используются только во время разработки. Эти службы управляются отдельно от служб среды выполнения EF Core, чтобы предотвратить их развертывание с помощью приложения. Чтобы переопределить одну из этих служб (например, службу для создания файлов миграции), добавьте реализацию IDesignTimeServices
в проект запуска.
internal class MyDesignTimeServices : IDesignTimeServices
{
public void ConfigureDesignTimeServices(IServiceCollection services)
=> services.AddSingleton<IMigrationsCodeGenerator, MyMigrationsCodeGenerator>();
}
Microsoft.EntityFrameworkCore.Design — это пакет DevelopmentDependency. Это означает, что зависимость не будет передаваться транзитивно в другие проекты, и что по умолчанию нельзя ссылаться на его типы.
Чтобы ссылаться на типы и переопределять службы времени разработки, обновите метаданные элемента PackageReference в файле проекта.
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="3.1.9">
<PrivateAssets>all</PrivateAssets>
<!-- Remove IncludeAssets to allow compiling against the assembly -->
<!--<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>-->
</PackageReference>
Если пакет ссылается транзитивно через Microsoft.EntityFrameworkCore.Tools, необходимо добавить явную ссылку PackageReference в пакет и изменить ее метаданные.
Ниже приведен список служб времени разработки.
Служба | Description |
---|---|
IAnnotationCodeGenerator | Создает код для соответствующих заметок модели. |
ICSharpHelper | Помогает создавать код C#. |
IPluralizer | Плюрализация и сингуляризация слов. |
IMigrationsCodeGenerator | Создает код для миграции. |
IMigrationsScaffolder | Основной класс для управления файлами миграции. |
IDatabaseModelFactory | Создает модель базы данных из базы данных. |
IModelCodeGenerator | Создает код для модели. |
IProviderConfigurationCodeGenerator | Создает код OnConfiguring. |
IReverseEngineerScaffolder | Основной класс для шаблонов реверсивных моделей. |
IScaffoldingModelFactory | Создает модель из модели базы данных. |
Эти службы также могут быть полезны для создания собственных средств. Например, если требуется автоматизировать часть рабочего процесса разработки.
Вы можете создать поставщик услуг, содержащий эти службы, с помощью методов расширения AddEntityFrameworkDesignTimeServices и AddDbContextDesignTimeServices.
var db = new MyDbContext();
// Create design-time services
var serviceCollection = new ServiceCollection();
serviceCollection.AddEntityFrameworkDesignTimeServices();
serviceCollection.AddDbContextDesignTimeServices(db);
var serviceProvider = serviceCollection.BuildServiceProvider();
// Add a migration
var migrationsScaffolder = serviceProvider.GetService<IMigrationsScaffolder>();
var migration = migrationsScaffolder.ScaffoldMigration(migrationName, rootNamespace);
migrationsScaffolder.Save(projectDir, migration, outputDir);
Отзыв о .NET
.NET — это проект с открытым исходным кодом. Выберите ссылку, чтобы оставить отзыв: