Tasarım zamanı hizmetleri
Araçlar tarafından kullanılan bazı hizmetler yalnızca tasarım zamanında kullanılır. Bu hizmetler, uygulamanızla dağıtılmalarını önlemek için EF Core'un çalışma zamanı hizmetlerinden ayrı olarak yönetilir. Bu hizmetlerden birini (örneğin, geçiş dosyalarının oluşturulacağı hizmet) geçersiz kılmak için başlangıç projenize uygulamasını IDesignTimeServices
ekleyin.
internal class MyDesignTimeServices : IDesignTimeServices
{
public void ConfigureDesignTimeServices(IServiceCollection services)
=> services.AddSingleton<IMigrationsCodeGenerator, MyMigrationsCodeGenerator>();
}
Başvuru Microsoft.EntityFrameworkCore.Design
Microsoft.EntityFrameworkCore.Design bir DevelopmentDependency paketidir. Bu, bağımlılığın diğer projelere geçişli olarak akmayacağı ve varsayılan olarak türlerine başvuramayacağınız anlamına gelir.
Türlerine başvurmak ve tasarım zamanı hizmetlerini geçersiz kılmak için PackageReference öğesinin meta verilerini proje dosyanızda güncelleştirin.
<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>
Pakete Microsoft.EntityFrameworkCore.Tools aracılığıyla geçişli olarak başvuruluyorsa, pakete açık bir PackageReference eklemeniz ve meta verilerini değiştirmeniz gerekir.
Hizmet listesi
Aşağıda tasarım zamanı hizmetlerinin listesi yer alır.
Hizmet | Tanım |
---|---|
IAnnotationCodeGenerator | İlgili model ek açıklamaları için kodu oluşturur. |
ICSharpHelper | C# kodu oluşturmaya yardımcı olur. |
IPluralizer | Sözcükleri çoğullaştırır ve tekilleştirir. |
IMigrationsCodeGenerator | Geçiş için kod oluşturur. |
IMigrationsScaffolder | Geçiş dosyalarını yönetmek için ana sınıf. |
IDatabaseModelFactory | Veritabanından veritabanı modeli oluşturur. |
IModelCodeGenerator | Bir model için kod oluşturur. |
IProviderConfigurationCodeGenerator | OnConfiguring kodu oluşturur. |
IReverseEngineerScaffolder | Ters mühendislik uygulanmış modellerin iskelesi için ana sınıf. |
IScaffoldingModelFactory | Veritabanı modelinden model oluşturur. |
Hizmetleri kullanma
Bu hizmetler kendi araçlarınızı oluşturmak için de yararlı olabilir. Örneğin, tasarım zamanı iş akışınızı otomatikleştirmek istediğinizde.
AddEntityFrameworkDesignTimeServices ve AddDbContextDesignTimeServices uzantı yöntemlerini kullanarak bu hizmetleri içeren bir hizmet sağlayıcısı oluşturabilirsiniz.
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);