Dela via


Använda ett separat migrationsprojekt

Du kanske vill lagra dina migreringar i ett annat projekt än det som innehåller din DbContext. Detta rekommenderas om ditt projekt använder en plattformsspecifik projekttyp, till exempel WinUI, Xamarin, MAUI, Blazor eller Azure Functions, eller om det riktar sig mot en specifik körningsidentifierare (RID). Du kan också använda den här strategin för att underhålla flera uppsättningar migreringar, till exempel en för utveckling och en annan för versionsuppgraderingar.

Tip

Du kan visa den här artikelns sampling på GitHub.

Steps

  1. Skapa ett nytt klassbibliotek.

  2. Lägg till en referens till ditt DbContext-projekt.

  3. Flytta migreringarna och modellögonblicksfilerna till klassbiblioteket.

    Tip

    Om du inte har några befintliga migreringar genererar du en i projektet som innehåller DbContext och flyttar den. Det här är viktigt eftersom om migreringsprojektet inte innehåller någon befintlig migrering kan kommandot Add-Migration inte hitta DbContext.

  4. Konfigurera migreringssammansättningen:

    services.AddDbContext<ApplicationDbContext>(
        options =>
            options.UseSqlServer(
                Configuration.GetConnectionString("DefaultConnection"),
                x => x.MigrationsAssembly("WebApplication1.Migrations")));
    
  5. Lägg till en referens till migreringsprojektet från startprojektet .

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

    Om detta orsakar ett cirkulärt beroende kan du uppdatera basutdatasökvägen för migreringsprojektet i stället:

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

Om du gjorde allt korrekt bör du kunna lägga till nya migreringar i projektet.

dotnet ef migrations add NewMigration --project WebApplication1.Migrations

Tip

Om ditt program använder beroendeinmatning kan du överväga att implementera IDesignTimeDbContextFactory<TContext> i migreringsprojektet. På så sätt kan EF-verktygen skapa dina DbContext utan att behöva köra startprojektet. Mer information finns i Från en design-tidsfabrik.