使用单独的迁移项目

你可能希望将迁移存储在与不同的项目中,而不是包含 DbContext 的项目中。 还可使用此策略来维护多组迁移,例如,一组迁移用于开发,另一组用于版本到版本升级。

提示

可在 GitHub 上查看此文章的示例

步骤

  1. 创建一个新的类库。

  2. 添加对 DbContext 项目的引用。

  3. 将迁移和模型快照文件移动到类库。

    提示

    如果没有现有迁移,在包含 DbContext 的项目中生成一个迁移,然后移动它。 这一点很重要,因为如果迁移项目不包含现有迁移,Add-Migration 命令将无法找到 DbContext。

  4. 配置迁移程序集:

    services.AddDbContext<ApplicationDbContext>(
        options =>
            options.UseSqlServer(
                Configuration.GetConnectionString("DefaultConnection"),
                x => x.MigrationsAssembly("WebApplication1.Migrations")));
    
  5. 从 startup 项目添加对迁移项目的引用

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

    如果这会导致循环依赖项,可以改为更新 migrations 项目的基本输出路径

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

如果一切正常,应该能够向项目添加新的迁移。

dotnet ef migrations add NewMigration --project WebApplication1.Migrations