Add-Migration报错No DbContext was found in assembly,重装EF后重启项目问题复现
Add-Migration 报错"No DbContext was found in assembly" 解决方案
- 指定命令运行参数
运行命令时明确标注DbContext所属项目、启动项目和目标DbContext,避免命令默认扫描错程序集:
Add-Migration [你的迁移名称] -Context [你的DbContext类全名] -Project [DbContext所在的项目名称] -StartupProject [你的Web启动项目名称]
如果使用dotnet CLI,对应命令为:
dotnet ef migrations add [你的迁移名称] --context [你的DbContext类全名] --project [DbContext所在的项目路径/名称] --startup-project [你的Web启动项目路径/名称]
- 检查DbContext注册和定义
- 确认启动项目的
Program.cs(或Startup.cs)中已正确注册DbContext服务,示例:
builder.Services.AddDbContext<MyDbContext>(options => options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));
- 确认DbContext类为公共类,且存在公共的
DbContextOptions<MyDbContext>参数构造函数,没有修改为私有构造。
- 核对EF版本一致性
该报错在更新EF后临时恢复、重启后复现,大概率是EF工具版本和项目依赖的EF包版本不匹配导致:
- 运行
dotnet ef --version查看全局EF工具版本 - 核对解决方案中所有项目引用的
Microsoft.EntityFrameworkCore相关包版本,保证和工具大版本完全一致,例如工具版本为7.0.14,则所有EF包版本也需为7.0.x版本,不允许跨大版本混用。
清理项目缓存
删除解决方案下所有项目的bin、obj文件夹,右键解决方案选择「清理」后再执行「重建解决方案」,消除编译缓存导致的程序集扫描异常。新增设计时DbContext工厂
如果以上方案都不生效,可以在DbContext所在项目中新增设计时工厂类,EF迁移工具会优先读取该类的配置创建DbContext,避免扫描失败:
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Design; namespace YourNamespace { public class DesignTimeMyDbContextFactory : IDesignTimeDbContextFactory<MyDbContext> { public MyDbContext CreateDbContext(string[] args) { var optionsBuilder = new DbContextOptionsBuilder<MyDbContext>(); // 替换为你的开发环境数据库连接字符串 optionsBuilder.UseSqlServer("Server=(localdb)\\mssqllocaldb;Database=MyDb;Trusted_Connection=True;"); return new MyDbContext(optionsBuilder.Options); } } }
报错截图参考:
内容的提问来源于stack exchange,提问作者Kristijan
相关产品推荐
相关产品推荐

