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

本文探讨了Entity Framework Core中实体对象被上下文跟踪导致的问题,并提供了一种解决方案:通过使用临时EF上下文对象来避免原有上下文的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

出现的问题如标题所示

出现这个问题的原因是当前使用的entity对象已经在ef上下文中被附加了,如果要解决这种问题的话,网上有很多都是在查询的时候加入一个AsNoTracking()方法,表示查询的时候让上下文不要跟踪这个对象,不知道具体作用如何,反正我用过,是不行的。希望大家有成功的,能与我分享一下。


这里说一下我的解决方法,大家应该做这些的时候都会封装一些Helper,以便调用,那么肯定使用的上下文对象也就是公共的了,我这里也是使用的一个公共的静态的上下文单例对象,所以查询的时候会被跟踪,当然,虽然我没感觉到AsNoTracking()方法对我的修改有什么帮助,我还是加上了,至少查询的时候不会因为缓存影响到我们的查询。然后我在修改的时候就不适用那个公共的单例对象,我重新创建了一个ef上下文对象。当然,有的人会说,这样非常浪费内存。没办法,暂时我没有找到其他更高的解决方法,所以,我用了using,这样虽然每次使用update的时候还是会重新创建一个ef上下文对象,但是至少在使用完了之后能够被及时的回收。


希望大家有什么更好的解决方案,能够分享给我。谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值