关闭

针对【ObjectStateManager 中已存在具有同一键的对象。ObjectStateManager 无法跟踪具有相同键的多个对象。】的解决方案

标签: EFMVC
2216人阅读 评论(0) 收藏 举报
分类:

       近期使用MVC4+EF5开发项目,做增删改查的时候经常会出现操作失败的问题,提示ObjectStateManager 无法跟踪具有相同键的多个对象。信息,经过几天的跟踪测试和网上查找一些相关资料发现是EF的缓存问题,在对数据集进行增删改查的时候,EF会把查询的对象缓存到DbContext中,所以当我们在将需要操作的对象附加到上下文中时就会出现冲突,出现此问题。

      比如更新一个实体,如果之前进行过查询操作,EF就会缓存查询的实体,再进行更新时,先把要更新的实体附加到上下文,然后再标记为Modified状态,这时会出现上述问题

解决方案是:在查询的时候使用DbContext.AsNoTracking().Where(f => true).ToList();查询

下面是该方法的签名

        // 摘要:
        //     返回一个新查询,其中返回的实体将不会在 System.Data.Entity.DbContext 中进行缓存。
        //
        // 返回结果:
        //     应用了 NoTracking 的新查询。
        public DbQuery<TResult> AsNoTracking();

希望可以解决初学者的困扰

纯属个人观点,欢迎高手批评指正

1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:68602次
    • 积分:1005
    • 等级:
    • 排名:千里之外
    • 原创:30篇
    • 转载:14篇
    • 译文:5篇
    • 评论:7条
    最新评论