Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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>();
}
Referensi 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 tipe dan menggantikan layanan waktu desain, perbarui metadata item PackageReference dalam file proyek Anda.
<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>
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.
| Pelayanan | Description |
|---|---|
| IAnnotationCodeGenerator | Menghasilkan kode untuk anotasi model yang sesuai. |
| ICSharpHelper | Membantu menghasilkan kode C#. |
| IPluralizer | Pluralisasi dan mensingkularisasi kata- kata. |
| ICSharpMigrationOperationGenerator | Menghasilkan kode C# untuk operasi migrasi. |
| ICSharpSnapshotGenerator | Menghasilkan kode C# untuk rekam jepret model. |
| IMigrationsCodeGenerator | Menghasilkan kode untuk migrasi. |
| IMigrationsCodeGeneratorSelector | Memilih generator kode migrasi yang sesuai. |
| IMigrationsScaffolder | Kelas utama untuk mengelola file migrasi. |
| ICompiledModelCodeGenerator | Menghasilkan kode untuk metadata model yang dikompilasi. |
| ICompiledModelCodeGeneratorSelector | Memilih generator yang sesuai untuk kode model terkompilasi. |
| ICompiledModelScaffolder | Kelas utama untuk scaffolding model yang dikompilasi. |
| IDatabaseModelFactory | Membuat model database dari basis data. |
| IModelCodeGenerator | Menghasilkan kode untuk model. |
| IModelCodeGeneratorSelector | Memilih generator kode model yang sesuai. |
| IProviderConfigurationCodeGenerator | Menghasilkan kode OnConfiguring. |
| IReverseEngineerScaffolder | Kelas utama untuk pengembangan model yang telah direkayasa balik. |
| IScaffoldingModelFactory | Membuat model dari model database. |
| IPrecompiledQueryCodeGenerator | Menghasilkan kode untuk kueri yang telah dikompilasi sebelumnya. |
| IPrecompiledQueryCodeGeneratorSelector | Memilih generator kode kueri yang telah dikompilasi yang sesuai. |
Menggunakan layanan
Layanan ini juga dapat berguna untuk membuat alat Anda sendiri. Misalnya, ketika Anda ingin mengotomatiskan sebagian dari proses kerja selama waktu desain Anda.
Anda dapat membangun penyedia layanan yang berisi layanan ini menggunakan metode ekstensi AddEntityFrameworkDesignTimeServices dan 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);