Tasarım zamanı hizmetleri

Araçlar tarafından kullanılan bazı hizmetler yalnızca tasarım zamanında kullanılır. Bu hizmetler, EF Core çalışma zamanı hizmetlerinden ayrı olarak yönetilir ve bu uygulamaların uygulamanızla dağıtılmasını önler. Bu hizmetlerden birini geçersiz kılmak için (örneğin, geçiş dosyaları oluşturma hizmeti), başlangıç projenize bir uygulamasını ekleyin IDesignTimeServices .

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

Microsoft.EntityFrameworkCore.Design 'ye başvurma

Microsoft.EntityFrameworkCore.Design, bir DevelopmentDependency paketidir. Bu, bağımlılığın diğer projelere geçişli olarak akamayacağı ve varsayılan olarak kendi türlerine başvurmayacağı anlamına gelir.

Türlerine başvurmak ve tasarım zamanı hizmetlerini geçersiz kılmak için, proje dosyanızdaki PackageReference öğesinin meta verilerini 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 üzerinden geçişli olarak başvuruluyorsa, pakete açık bir PackageReference eklemeniz ve meta verilerini değiştirmeniz gerekir.

Hizmetler listesi

Tasarım zamanı hizmetlerinin bir listesi aşağıda verilmiştir.

Hizmet Açıklama
Iannotationcodegenerator Karşılık gelen model ek açıklamaları için kod üretir.
Isharphelper C# kodu oluşturmaya yardımcı olur.
IPluralizer Çoğullarurun ve sözcükleri gösterir.
Imıgrationscodegenerator Bir geçiş için kod üretir.
Imigrationsscaffolder Geçiş dosyalarını yönetmeye yönelik ana sınıf.
Idatabasemodelfactory Veritabanından bir veritabanı modeli oluşturur.
Imodelcodegenerator Bir model için kod üretir.
Iproviderconfigurationcodegenerator Onyapılandırıyor kodu oluşturur.
Isuengineerscaffolder Ters mühendislik uygulanan modellerin yapı iskelesi için ana sınıf.
Icaffoldingmodelfactory Veritabanı modelinden bir model oluşturur. EF Core 6,0 ' ye eklenmiştir.

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ın bir kısmını otomatik hale getirmek istediğinizde.

AddEntityFrameworkDesignTimeServices ve AddDbContextDesignTimeServices uzantı yöntemlerini kullanarak bu hizmetleri içeren bir hizmet sağlayıcı 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);