Migrasi dengan Beberapa Penyedia
Migrasi perancah hanya Alat Inti EF untuk penyedia aktif. Namun, terkadang Anda mungkin ingin menggunakan lebih dari satu penyedia (misalnya Microsoft SQL Server dan SQLite) dengan DbContext Anda. Tangani ini dengan mempertahankan beberapa set migrasi--satu untuk setiap penyedia--dan menambahkan migrasi ke masing-masing untuk setiap perubahan model.
Menggunakan beberapa jenis konteks
Salah satu cara untuk membuat beberapa set migrasi adalah dengan menggunakan satu jenis DbContext per penyedia.
class SqliteBlogContext : BlogContext
{
protected override void OnConfiguring(DbContextOptionsBuilder options)
=> options.UseSqlite("Data Source=my.db");
}
Tentukan jenis konteks saat menambahkan migrasi baru.
dotnet ef migrations add InitialCreate --context BlogContext --output-dir Migrations/SqlServerMigrations
dotnet ef migrations add InitialCreate --context SqliteBlogContext --output-dir Migrations/SqliteMigrations
Tip
Anda tidak perlu menentukan direktori output untuk migrasi berikutnya karena dibuat sebagai saudara kandung untuk yang terakhir.
Menggunakan satu jenis konteks
Anda juga dapat menggunakan satu jenis DbContext. Saat ini memerlukan pemindahan migrasi ke rakitan terpisah. Silakan merujuk ke Menggunakan Proyek Migrasi Terpisah untuk instruksi tentang menyiapkan proyek Anda.
Tip
Anda dapat melihat contoh artikel ini di GitHub.
Anda dapat meneruskan argumen ke dalam aplikasi dari alat. Ini dapat mengaktifkan alur kerja yang lebih efisien yang menghindari harus membuat perubahan manual pada proyek saat menjalankan alat.
Berikut adalah salah satu pola yang berfungsi dengan baik saat menggunakan Host Generik.
public static IHostBuilder CreateHostBuilder(string[] args)
=> Host.CreateDefaultBuilder(args)
.ConfigureServices(
(hostContext, services) =>
{
services.AddHostedService<Worker>();
// Set the active provider via configuration
var configuration = hostContext.Configuration;
var provider = configuration.GetValue("Provider", "SqlServer");
services.AddDbContext<BlogContext>(
options => _ = provider switch
{
"Sqlite" => options.UseSqlite(
configuration.GetConnectionString("SqliteConnection"),
x => x.MigrationsAssembly("SqliteMigrations")),
"SqlServer" => options.UseSqlServer(
configuration.GetConnectionString("SqlServerConnection"),
x => x.MigrationsAssembly("SqlServerMigrations")),
_ => throw new Exception($"Unsupported provider: {provider}")
});
});
Karena penyusun host default membaca konfigurasi dari argumen baris perintah, Anda dapat menentukan penyedia saat menjalankan alat.
dotnet ef migrations add MyMigration --project ../SqlServerMigrations -- --provider SqlServer
dotnet ef migrations add MyMigration --project ../SqliteMigrations -- --provider Sqlite
Tip
Token --
mengarahkan dotnet ef
untuk memperlakukan semua yang mengikuti sebagai argumen dan tidak mencoba mengurainya sebagai opsi. Argumen tambahan apa pun yang tidak digunakan oleh dotnet ef
diteruskan ke aplikasi.
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk