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