EF Core跨实例共享跟踪实体引发Attach报错、异常更新问题
运行环境
- 数据访问栈:EF Core 3.1.26 搭配 EntityFrameworkCore.Jet 3.1.1 提供程序操作 MS Access 数据库
- 版本限制:受兼容约束,无法升级 EF Core 版本
初期观测到的异常表现
- 实体附加报错:新建上下文实例后执行实体
Attach操作时,直接抛出实体已被跟踪的错误。排查确认该实体是当前上下文附加的首个实体,所有数据查询均已标记AsNoTracking,通过调试器检查ChangeTracker.Entries属性,也未发现预先存在的已跟踪实体。 - 保存操作误更新无关数据:执行
SaveChanges操作时,即便当前上下文未执行任何数据查询,Entries集合中仅存在手动附加、导航属性已设为null的实体,仍会触发多张表的无关实体批量更新,这些被误更新的实体均来自其他上下文实例中通过AsNoTracking查询得到的结果。 - 异常特征:初期无法确认 EF Core 或 EntityFrameworkCore.Jet 从何处加载到这些无关实体,
Attach、SaveChanges操作的表现如同访问了全局静态共享的ChangeTracker,暂未定位到根因和解决方案。
最终排查结论
经后续完整排查确认,上述异常属于自身检查疏漏导致的误判,不存在跨上下文实例共享静态跟踪缓存的问题。
内容的提问来源于stack exchange,提问作者SoftwareOverflow
相关产品推荐
相关产品推荐

