.NET Core 3.1配置MigrationsAssembly后跨项目执行EF迁移失败如何解决?
问题定位与修复方案
1. 配置代码错误
你在Startup.cs中配置迁移程序集的参数填写错误,MigrationsAssembly()方法需要传入的是存放迁移文件的项目的程序集名称,而非迁移文件所在的命名空间。你当前把迁移文件放在DatabaseContext项目中,默认程序集名称和项目名一致,所以应该修改配置为:
services.AddDbContext<ApplicationDbContext>( c => c.UseSqlServer(_config.GetConnectionString("ApplicationDbContext"), opt => opt.MigrationsAssembly("DatabaseContext")));
2. 命令执行路径错误
你的相对路径计算错误,且路径包含空格未加引号,同时存在大小写不匹配问题:
- 你的DatabaseContext项目存放在
Shop/1. DatabaseSchema/路径下,如果你在DatabaseContext项目目录执行命令,要找到上级根目录的ShopApi项目,需要向上回溯两层,而非一层 - 路径中包含空格时,必须用引号包裹路径字符串
- 你的项目名为
ShopApi,命令中错误写为ShopAPI,大小写差异在非Windows系统下会触发找不到项目的报错
3. 正确执行步骤
推荐直接在解决方案根目录(也就是Shop文件夹目录)下执行命令,避免相对路径计算错误,正确命令如下:
- 新增迁移命令:
dotnet ef migrations add ExampleMigration --project "1. DatabaseSchema/DatabaseContext" --startup-project ShopApi - 生成迁移脚本命令:
dotnet ef migrations script --project "1. DatabaseSchema/DatabaseContext" --startup-project ShopApi
如果坚持在DatabaseContext项目目录下执行,对应命令为:dotnet ef migrations add ExampleMigration -s "../../ShopApi"dotnet ef migrations script --startup-project "../../ShopApi"
附加提醒:如果执行命令提示找不到ef工具,先执行全局安装命令:dotnet tool install --global dotnet-ef
内容的提问来源于stack exchange,提问作者Eduard
相关产品推荐
相关产品推荐

