Usar um projeto de migrações separado

Pode ser interessante armazenar as migrações em um projeto diferente do que aquele que contém o DbContext. Você também pode usar essa estratégia para manter vários conjuntos de migrações, por exemplo, um para desenvolvimento e outro para atualizações de versão para lançamento.

Dica

Veja o exemplo deste artigo no GitHub.

Etapas

  1. Criar uma nova biblioteca de classes.

  2. Adicione uma referência ao seu projeto de DbContext.

  3. Mova as migrações e os arquivos de instantâneo de modelo para a biblioteca de classes.

    Dica

    Se você não tiver migrações existentes, gere uma no projeto que contém o DbContext e mova-a. Isso é importante porque, se o projeto de migrações não contiver uma migração, o comando Add-Migration não poderá localizar o DbContext.

  4. Configure o assembly de migrações:

    services.AddDbContext<ApplicationDbContext>(
        options =>
            options.UseSqlServer(
                Configuration.GetConnectionString("DefaultConnection"),
                x => x.MigrationsAssembly("WebApplication1.Migrations")));
    
  5. Adicione uma referência ao projeto de migrações com base no projeto de inicialização.

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

    Se isso causar uma dependência circular, você poderá atualizar o caminho de saída base do projeto de migrações:

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

Se você tiver feito tudo corretamente, deverá conseguir adicionar novas migrações ao projeto.

dotnet ef migrations add NewMigration --project WebApplication1.Migrations