dotnet aspnet-codegenerator报错:发现多个同名DbContext,但项目仅一个
解决dotnet aspnet-codegenerator提示多个同名DbContext的问题
看起来你遇到的是代码生成器误判DbContext数量的问题——明明项目里只有一个TriviaDbContext,却被识别成多个,下面是几个针对性的解决办法:
1. 运行命令时明确指定DbContext
代码生成器有时候会因为程序集扫描的歧义,找不到唯一的上下文。这时候手动指定上下文的完整命名空间就能解决,比如你生成控制器的命令可以改成:
dotnet aspnet-codegenerator controller -name HostController -m Host -dc Trivia.Models.TriviaDbContext
这里的-dc(或--dataContext)参数用来指定要使用的DbContext,加上完整命名空间可以彻底避免识别歧义。
2. 清理编译残留文件
项目的bin和obj目录里可能残留旧的编译文件,这些文件里可能包含你之前修改上下文时留下的旧定义,导致代码生成器误判。先执行以下命令清理并重新编译:
dotnet clean dotnet build
之后再重新运行代码生成命令试试。
3. 检查DbContext的注册是否重复
确认你在ConfigureServices里的DbContext注册代码没有重复。比如有没有不小心写了两次AddDbContext<TriviaDbContext>?正确的注册应该是类似这样的:
services.AddDbContext<TriviaDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
重复注册会让代码生成器认为存在多个上下文实例。
小优化建议(非问题原因,但更规范)
你的DbSet<Host>命名为Host,按照EF Core的惯例,建议改成复数形式Hosts,这样生成的数据库表名会更符合行业规范:
public DbSet<Host> Hosts { get; set; }
内容的提问来源于stack exchange,提问作者iJK
相关产品推荐
相关产品推荐

