You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core3.1迁移至.NET6后AddDbContext报重复键错误求助

解决.NET6迁移中EF Core重复添加连接字符串键的错误

从.NET Core3.1迁移到.NET6并引入Microsoft EntityFramework后,出现如下错误:

An item with the same key has already been added. Key: server=""id="";password="";database="";convertzerodatetime=True;defaultcommandtimeout=120

经排查确认,该错误是由于重复调用AddDbContext注册同一连接字符串对应的DbContext导致的键冲突,以下是具体解决办法:

  • 检查项目的服务注册代码(.NET6默认是Program.cs的顶级语句,若保留Startup结构则看Startup.cs),找出所有AddDbContext<你的DbContext类>的调用,只保留一处注册即可。
    错误示例:

    builder.Services.AddDbContext<AppDbContext>(options =>
        options.UseMySql(builder.Configuration.GetConnectionString("DefaultConnection")));
    // 重复的DbContext注册,会引发冲突
    builder.Services.AddDbContext<AppDbContext>(options =>
        options.UseMySql(builder.Configuration.GetConnectionString("DefaultConnection")));
    

    修正后仅保留一次AddDbContext调用。

  • 若项目中使用了第三方扩展方法或自定义工具类注册DbContext,检查这些代码内部是否已经执行了AddDbContext,避免间接重复注册。

  • 可以改用TryAddDbContext替代AddDbContext,该方法会先检查目标DbContext是否已注册,仅在未注册时执行添加操作,从根源避免重复:

    builder.Services.TryAddDbContext<AppDbContext>(options =>
        options.UseMySql(builder.Configuration.GetConnectionString("DefaultConnection")));
    

内容的提问来源于stack exchange,提问作者Ash

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 10:12:13