Uso de un proyecto de migraciones independientes

Es posible que quiera almacenar las migraciones en un proyecto diferente al que contiene DbContext. Esto se recomienda si el proyecto usa un tipo de proyecto específico de la plataforma, como WinUI, Xamarin, MAUI, Blazor o Azure Functions, o si tiene como destino un identificador en tiempo de ejecución específico (RID). También puede usar esta estrategia para mantener varios conjuntos de migraciones, por ejemplo, uno para el desarrollo y otro para las actualizaciones de versión a versión.

Steps

  1. Cree una nueva biblioteca de clases.

  2. Agregue una referencia al proyecto DbContext.

  3. Mueva las migraciones y los archivos de instantánea del modelo a la biblioteca de clases.

    Tip

    Si no tiene migraciones existentes, genere una en el proyecto que contenga DbContext y muévala. Esto es importante porque si el proyecto de migraciones no contiene una migración existente, el comando Add-Migration no podrá encontrar DbContext.

  4. Configure el ensamblado de migraciones:

    services.AddDbContext<ApplicationDbContext>(
        options =>
            options.UseSqlServer(
                Configuration.GetConnectionString("DefaultConnection"),
                x => x.MigrationsAssembly("WebApplication1.Migrations")));
    
  5. Agregue una referencia al proyecto de migraciones desde el proyecto startup.

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

    Si esto provoca una dependencia circular, puede actualizar la ruta de acceso de salida base del proyecto de migraciones en su lugar:

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

Si lo hizo correctamente, debería poder agregar nuevas migraciones al proyecto.

dotnet ef migrations add NewMigration --project WebApplication1.Migrations

Tip

Si la aplicación usa la inserción de dependencias, considere la posibilidad de implementar IDesignTimeDbContextFactory<TContext> en el proyecto de migraciones. Esto permite a las herramientas de EF crear su DbContext sin necesidad de ejecutar el proyecto de inicio. Para obtener más información, consulte Desde una fábrica en tiempo de diseño.