Службы времени разработки

Некоторые службы, используемые инструментами, используются только во время разработки. Эти службы управляются отдельно от служб среды выполнения EF Core, чтобы предотвратить их развертывание с помощью приложения. Чтобы переопределить одну из этих служб (например, службу для создания файлов миграции), добавьте реализацию IDesignTimeServices в проект запуска.

internal class MyDesignTimeServices : IDesignTimeServices
{
    public void ConfigureDesignTimeServices(IServiceCollection services)
        => services.AddSingleton<IMigrationsCodeGenerator, MyMigrationsCodeGenerator>();
}

Ссылка на Microsoft.EntityFrameworkCore.Design

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);