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

原创 2015年11月21日 16:25:45

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

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

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

下面是该方法的签名

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

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

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

相关文章推荐

objectstatemanager 中已存在具有同一键的对象。objectstatemanager 无法跟踪具有相同键的多个对象。

今天用entityframework去更新数据库

EF ObjectStateManager 中已存在具有同一键的对象。ObjectStateManager 无法跟踪具有相同键的多个对象

今天编码过程中遇到这个问题,在网上也查了一些所说的方式方法,但我不能使用,为什么这里面就不表述了 说重点吧。 我这个是这么理解的,出现这个问题应该是 ObjectContext 中被 attach 了...
  • jzep_lj
  • jzep_lj
  • 2013年12月03日 01:24
  • 4046

EF ObjectStateManager无法跟踪具有相同键的多个对象

一般这个问题会出现在EF更新数据库时。我查了很多资料,大致产生这个问题的原因是当前上下文中已经包含了这一条记录,而且是出于被跟踪状态,所以不能再附加具有相同键的对象,通俗点解释就是:出错这个错误是因为...

调试Bug:ObjectStateManager 中已存在具有同一键的对象。ObjectStateManager 无法跟踪具有相同键的多个对象。

恭喜你,当你遇到此类问题,说明你的思路和我当初的思路是一样的。 在

Entity Framework 之Code First自动数据迁移

using MvcShopping.Migrations; using MvcShopping.Models; using System; using System.Collections.Gener...

EF CodeFirst 约定、注释及Fluent API

 实体框架 Code First 约定 http://msdn.microsoft.com/zh-cn/data/jj679962 实体框架 Code First 数据注释 htt...
  • X_Craft
  • X_Craft
  • 2014年10月16日 22:18
  • 1927

不同的java对象引用相同的内存地址异常解决方案

1、首先数据库查询有四条记录:查询视图:select * from tav_user_dept_role where USER_TITLE = '罗可扬';返回结果: 那么也就对应了...

有关同一解决方案下多个工程相互调用的问题

最新修改时间:20160515 以前自己在写C#的时候就经常需要用到这方面的知识,但当时感觉挺容易处理的,也就并没有留意。现在开始接触C++,刚开始还是有很多不熟悉的。这里我不是想讲lib和dll的区...

VS2015使用小技巧 在同一解决方案下,添加多个项目

镇场诗:慈心积善融学习,技术誓为大家学。善心速造多好事,前人栽树后乘凉。我今于此写经验,愿见文者得启发。 ——————————————————————————————————————————————...

JAXB "有两个名为 "**" 的属性,类的两个属性具有相同名称 "**""解决方案

用eclipse写JAXB时,发现总是报这样的错。     这是为什么呢? 在网上搜索到的jaxb2的中文教程很少,而且内容太过简单,查阅了一些英文的资料,发现问题是“名称的冲突”。 这里说的名称冲突...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:针对【ObjectStateManager 中已存在具有同一键的对象。ObjectStateManager 无法跟踪具有相同键的多个对象。】的解决方案
举报原因:
原因补充:

(最多只允许输入30个字)