Bagikan melalui


Layanan waktu desain

Beberapa layanan yang digunakan oleh alat hanya digunakan pada waktu desain. Layanan ini dikelola secara terpisah dari layanan runtime EF Core untuk mencegah layanan tersebut disebarkan dengan aplikasi Anda. Untuk mengambil alih salah satu layanan ini (misalnya layanan untuk menghasilkan file migrasi), tambahkan implementasi IDesignTimeServices ke proyek startup Anda.

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

Mereferensikan Microsoft.EntityFrameworkCore.Design

Microsoft.EntityFrameworkCore.Design adalah paket DevelopmentDependency. Ini berarti bahwa dependensi tidak akan mengalir secara transitif ke proyek lain, dan Anda tidak dapat, secara default, mereferensikan jenisnya.

Untuk mereferensikan jenisnya dan menimpa layanan waktu desain, perbarui metadata item PackageReference dalam file proyek Anda.

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

Jika paket direferensikan secara transitif melalui Microsoft.EntityFrameworkCore.Tools, Anda harus menambahkan PackageReference eksplisit ke paket dan mengubah metadatanya.

Daftar layanan

Berikut ini adalah daftar layanan waktu desain.

Layanan Deskripsi
IAnnotationCodeGenerator Menghasilkan kode untuk anotasi model yang sesuai.
ICSharpHelper Membantu menghasilkan kode C#.
IPluralizer Pluralisasi dan mensingkularisasi kata- kata.
IMigrationsCodeGenerator Menghasilkan kode untuk migrasi.
IMigrationsScaffolder Kelas utama untuk mengelola file migrasi.
IDatabaseModelFactory Membuat model database dari database.
IModelCodeGenerator Menghasilkan kode untuk model.
IProviderConfigurationCodeGenerator Menghasilkan kode OnConfiguring.
IReverseEngineerScaffolder Kelas utama untuk perancah model rekayasa terbalik.
IScaffoldingModelFactory Membuat model dari model database.

Menggunakan layanan

Layanan ini juga dapat berguna untuk membuat alat Anda sendiri. Misalnya, saat Anda ingin mengotomatiskan bagian dari alur kerja waktu desain Anda.

Anda dapat membangun penyedia layanan yang berisi layanan ini menggunakan metode ekstensi AddEntityFrameworkDesignTimeServices dan 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);