.NET Core 3.1中DBContext在独立程序集时迁移创建失败求助
解决EF Core迁移创建失败及独立迁移程序集配置问题
先搞定基础迁移报错(MSB1009)
你碰到的MSBUILD : error MSB1009本质是EF Core找不到指定项目,核心问题是没指定启动项目(类库没法单独作为EF命令的执行入口,得依赖启动项目读取配置),再就是命令的执行路径或参数可能有误。按下面步骤修正:
- 打开终端,切换到项目的root根目录(就是包含App、DataAccess文件夹的那个目录)
- 执行正确的迁移命令,务必带上
--startup-project参数(指定你的App作为启动项目):
dotnet ef migrations add InitialCreate --project DataAccess --startup-project App
- 如果你的DataAccess项目的csproj文件名和文件夹名不一致,直接指定完整的csproj路径就行,比如
--project ./DataAccess/YourActualDataAccessProj.csproj
配置独立的Migrations程序集(你的理想状态)
要是想把迁移文件单独放在Migrations程序集里,按以下步骤一步步来:
1. 理清项目引用关系
确保你的项目引用链是这样的:
Models:只放实体模型,不需要额外引用其他项目DataAccess:引用Models(用来存放DBContext)Migrations:引用DataAccess(迁移需要访问DBContext和实体模型)App:引用DataAccess(启动项目需要注册DBContext)
2. 在启动项目里配置迁移程序集
在App项目的Startup.cs(.NET 3.1一般用这个)的ConfigureServices方法里,注册DBContext时明确指定迁移程序集:
services.AddDbContext<YourDbContext>(options => { options.UseSqlServer( Configuration.GetConnectionString("YourConnectionStringName"), b => b.MigrationsAssembly("Migrations") // 这里填你的Migrations项目名称 ); });
别忘了确认App项目的appsettings.json里已经配置了正确的数据库连接字符串。
3. 执行迁移创建命令
回到root根目录,执行下面的命令,指定Migrations为目标项目、App为启动项目:
dotnet ef migrations add InitialCreate --project Migrations --startup-project App
额外要注意的点
- EF Core版本统一:确保DataAccess、Migrations、App项目里引用的EF Core NuGet包版本完全一致(都是3.1.x系列),版本不匹配会引发各种奇怪问题
- 连接字符串验证:启动项目App的appsettings.json里的连接字符串必须能正常访问你的数据库,EF创建迁移时会读取这个配置
- 项目路径兜底:如果还是提示找不到项目,直接用csproj的绝对/相对路径代替项目名称,比如
--project ./Migrations/Migrations.csproj - 保留已加的配置:你之前在App的csproj里添加的
<GenerateRuntimeConfigurationFiles>True</GenerateRuntimeConfigurationFiles>是正确的,继续保留即可
内容的提问来源于stack exchange,提问作者Bercovici Adrian
相关产品推荐
相关产品推荐

