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

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

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

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

下面是该方法的签名

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值