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

EF Core 5.0.10 CLI迁移时快照忽略output-dir路径的问题如何解决?

问题根因

这不是EF Core的bug,属于命令参数配置错误。
你在命令中将--project参数指定为了存放DbContext的MainProject,但--project参数的设计含义是存放迁移、快照文件的目标项目,EF Core CLI默认会将快照文件生成到--project指定项目的根目录下,结合你指定的命名空间生成对应的文件夹结构,所以才会出现快照生成在MainProject下匹配命名空间路径的问题。

正确配置方法

1. 命令参数修正

将--project参数改为指向存放迁移的MyMigrations项目,通过--context参数指定你定义的DbContext类名即可,正确的首次迁移命令如下:

dotnet ef migrations add Initial --project .\src\MyMigrations --startup-project .\src\MyMigrations --context 你的DbContext类名 --output-dir Migrations --namespace Mycompany.MyMigrations.Migrations

此时--output-dir的路径基准为MyMigrations项目根目录,直接写Migrations即可,迁移和快照文件都会统一生成在MyMigrations项目的Migrations文件夹下。

2. 历史错误迁移修复

如果已经生成了错误的迁移文件,按以下步骤清理后重新执行即可:

  • 删除MainProject目录下所有自动生成的迁移、快照文件
  • 删除MyMigrations项目中之前手动移动的迁移、快照文件
  • 执行上述修正后的迁移命令

3. 简化后续命令(可选)

你可以在DbContext的OnConfiguring方法中直接指定迁移程序集,后续执行迁移命令无需重复传--output-dir、--namespace参数:

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
    optionsBuilder.UseSqlServer(
        "你的数据库连接字符串",
        x => x.MigrationsAssembly("MyMigrations")
    );
}

后续新增迁移只需执行:

dotnet ef migrations add NewMigration --project .\src\MyMigrations --startup-project .\src\MyMigrations --context 你的DbContext类名

CLI会自动识别已有快照路径完成更新,不会再出现重复生成快照的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 02:36:05