Menggunakan Proyek Migrasi yang Terpisah

Anda mungkin ingin menyimpan migrasi Anda dalam proyek yang berbeda daripada proyek yang berisi DbContext. Ini disarankan jika proyek Anda menggunakan jenis proyek khusus platform, seperti WinUI, Xamarin, MAUI, Blazor, atau Azure Functions, atau jika menargetkan pengidentifikasi runtime tertentu (RID). Anda juga dapat menggunakan strategi ini untuk mempertahankan beberapa set migrasi, misalnya, satu untuk pengembangan dan satu lagi untuk peningkatan rilis-ke-rilis.

Tip

Anda dapat melihat sampel artikel ini di GitHub.

Steps

  1. Buat pustaka kelas baru.

  2. Tambahkan referensi ke proyek DbContext Anda.

  3. Pindahkan migrasi dan file snapshot model ke perpustakaan kelas.

    Tip

    Jika Anda tidak memiliki migrasi yang ada, buat migrasi dalam proyek yang berisi DbContext, lalu pindahkan. Ini penting karena jika proyek migrasi tidak berisi migrasi yang ada, perintah Add-Migration tidak akan dapat menemukan DbContext.

  4. Konfigurasikan rakitan migrasi:

    services.AddDbContext<ApplicationDbContext>(
        options =>
            options.UseSqlServer(
                Configuration.GetConnectionString("DefaultConnection"),
                x => x.MigrationsAssembly("WebApplication1.Migrations")));
    
  5. Tambahkan referensi ke proyek migrasi Anda dari proyek startup .

    <ItemGroup>
      <ProjectReference Include="..\WebApplication1.Migrations\WebApplication1.Migrations.csproj" />
    </ItemGroup>
    

    Jika ini menyebabkan dependensi melingkar, Anda dapat memperbarui jalur output dasar proyek migrasi sebagai gantinya:

    <PropertyGroup>
      <BaseOutputPath>..\WebApplication1\bin\</BaseOutputPath>
    </PropertyGroup>
    

Jika Anda melakukan semuanya dengan benar, Anda harus dapat menambahkan migrasi baru ke proyek.

dotnet ef migrations add NewMigration --project WebApplication1.Migrations

Tip

Jika aplikasi Anda menggunakan injeksi dependensi, pertimbangkan untuk menerapkan IDesignTimeDbContextFactory<TContext> dalam proyek migrasi Anda. Ini memungkinkan alat EF untuk membuat DbContext Anda tanpa perlu menjalankan proyek startup. Untuk informasi selengkapnya, lihat Dari pabrik waktu desain.