디자인 타임 서비스
도구에서 사용하는 일부 서비스는 디자인 타임에만 사용됩니다. 이러한 서비스는 앱과 함께 배포되지 않도록 EF Core의 런타임 서비스와 별도로 관리됩니다. 이러한 서비스 중 하나(예: 마이그레이션 파일을 생성하는 서비스)를 재정의하려면 IDesignTimeServices
의 구현을 시작 프로젝트에 추가합니다.
internal class MyDesignTimeServices : IDesignTimeServices
{
public void ConfigureDesignTimeServices(IServiceCollection services)
=> services.AddSingleton<IMigrationsCodeGenerator, MyMigrationsCodeGenerator>();
}
Referencing 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를 패키지에 추가하고 해당 메타데이터를 변경해야 합니다.
서비스 목록
다음은 디자인 타임 서비스의 목록입니다.
서비스 | 설명 |
---|---|
IAnnotationCodeGenerator | 해당 모델 주석에 대한 코드를 생성합니다. |
ICSharpHelper | C# 코드를 생성하는 데 도움이 됩니다. |
IPluralizer | 단어를 복수화하고 단수화합니다. |
IMigrationsCodeGenerator | 마이그레이션에 대한 코드를 생성합니다. |
IMigrationsScaffolder | 마이그레이션 파일을 관리하기 위한 기본 클래스입니다. |
IDatabaseModelFactory | 데이터베이스에서 데이터베이스 모델을 만듭니다. |
IModelCodeGenerator | URL에 대한 코드를 생성합니다. |
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