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
相关产品推荐
相关产品推荐

