You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET6中Database.Migrate()无法自动执行迁移的问题

解决.NET6自动迁移无法识别未执行迁移的问题

针对你遇到的问题,核心原因是Api项目无法定位到Infrastructure层中的迁移文件,以下是具体的解决步骤:

1. 注册DbContext时指定迁移程序集

在Api项目的Program.cs中注册ApiDbContext时,明确指定迁移所在的程序集(即你的Infrastructure项目名称),示例代码:

builder.Services.AddDbContext<ApiDbContext>(options =>
{
    options.UseSqlServer(
        builder.Configuration.GetConnectionString("DefaultConnection"),
        b => b.MigrationsAssembly("Infrastructure") // 替换为你的Infrastructure项目名称
    );
});

2. 确保迁移文件被复制到输出目录

进入Infrastructure项目的Migrations文件夹,选中所有迁移文件(包括*Designer.cs和Snapshot.cs),在属性窗口中设置:

  • 复制到输出目录:选择「如果较新则复制」
  • 生成操作:选择「内容」

3. 验证DbContext的迁移程序集配置

如果你的ApiDbContext在OnConfiguring方法中配置了数据库连接,也需要在这里指定迁移程序集,示例:

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
    optionsBuilder.UseSqlServer(
        "YourConnectionString",
        b => b.MigrationsAssembly("Infrastructure")
    );
}

4. 检查迁移文件的命名空间

确保所有迁移文件的命名空间与Infrastructure项目的命名空间一致(默认应为Infrastructure.Migrations),如果不一致,要么修改命名空间,要么在指定MigrationsAssembly时使用正确的程序集名称。

完成以上步骤后,重新运行Api项目,GetPendingMigrations()应该能正确识别到未执行的迁移,Migrate()也会自动执行这些迁移。

内容的提问来源于stack exchange,提问作者Meldrel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 21:45:43