도구에서 사용되는 일부 서비스는 디자인 타임에만 사용됩니다. 이러한 서비스는 앱과 함께 배포되지 않도록 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="9.0.0">
<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 | 단어를 복수화하고 단수화합니다. |
| ICSharpMigrationOperationGenerator | 마이그레이션 작업에 대한 C# 코드를 생성합니다. |
| ICSharpSnapshotGenerator | 모델 스냅샷에 대한 C# 코드를 생성합니다. |
| IMigrationsCodeGenerator | 마이그레이션에 대한 코드를 생성합니다. |
| IMigrationsCodeGeneratorSelector | 적절한 마이그레이션 코드 생성기를 선택합니다. |
| IMigrationsScaffolder | 마이그레이션 파일을 관리하기 위한 기본 클래스입니다. |
| ICompiledModelCodeGenerator | 컴파일된 모델 메타데이터에 대한 코드를 생성합니다. |
| ICompiledModelCodeGeneratorSelector | 적절한 컴파일된 모델 코드 생성기를 선택합니다. |
| ICompiledModelScaffolder | 컴파일된 모델을 스캐폴딩하기 위한 기본 클래스입니다. |
| IDatabaseModelFactory | 데이터베이스에서 데이터베이스 모델을 만듭니다. |
| IModelCodeGenerator | 모델에 대한 코드를 생성합니다. |
| IModelCodeGeneratorSelector | 적절한 모델 코드 생성기를 선택합니다. |
| IProviderConfigurationCodeGenerator | OnConfiguring 코드를 생성합니다. |
| IReverseEngineerScaffolder | 리버스 엔지니어링 모델을 스캐폴딩하기 위한 기본 클래스입니다. |
| IScaffoldingModelFactory | 데이터베이스 모델에서 모델을 만듭니다. |
| IPrecompiledQueryCodeGenerator | 미리 컴파일된 쿼리에 대한 코드를 생성합니다. |
| IPrecompiledQueryCodeGeneratorSelector | 미리 컴파일된 적절한 쿼리 코드 생성기를 선택합니다. |
서비스 사용
이러한 서비스는 사용자 고유의 도구를 만드는 데 유용할 수도 있습니다. 예를 들어 디자인 타임 워크플로의 일부를 자동화하려는 경우입니다.
AddEntityFrameworkDesignTimeServices 및 AddDbContextDesignTimeServices 확장 메서드를 사용하여 이러한 서비스를 포함하는 서비스 공급자를 빌드할 수 있습니다.
using var db = new MyDbContext();
// Create design-time services
var serviceCollection = new ServiceCollection();
serviceCollection.AddDbContextDesignTimeServices(db);
var provider = db.GetService<IDatabaseProvider>().Name;
var providerAssembly = Assembly.Load(new AssemblyName(provider));
var providerServicesAttribute = providerAssembly.GetCustomAttribute<DesignTimeProviderServicesAttribute>();
var designTimeServicesType = providerAssembly.GetType(providerServicesAttribute.TypeName, throwOnError: true);
((IDesignTimeServices)Activator.CreateInstance(designTimeServicesType)!).ConfigureDesignTimeServices(serviceCollection);
serviceCollection.AddEntityFrameworkDesignTimeServices();
var serviceProvider = serviceCollection.BuildServiceProvider();
// Add a migration
var migrationsScaffolder = serviceProvider.GetRequiredService<IMigrationsScaffolder>();
var migration = migrationsScaffolder.ScaffoldMigration(migrationName, rootNamespace);
migrationsScaffolder.Save(projectDir, migration, outputDir);
.NET