编译器错误~不能向ObjectStateManager添加相同的键

产生这个问题的原因,其时是由我们的习惯引起的,一般说过,我们的update操作是这样的

1 从数据表把数据获出来

2 修改取出现的实体值

3 发回给数据表,更新成功

这看上去没有问题,但在EF环境中就会产生问题,因为当你取实体时,默认情况下EF会向ObjectStateManager提交一种跟踪机制,即向它里面添加了一个键值,

而当你调用update时,这时它已经有这个键值了,所有出现异常也很正常。

解决方法1:

不使用上面的逻辑,直接将实体附加到数据上下文中,这是可以的

解决方法2:

在获取单条实体时,取消实体跟踪,扩展方法是AsNoTracking(),这时不会向ObjectStateManager添加键值,在更新时,就不会出现这会异常了


呵呵,有时这些ORM框架给我们设了不少陷阱,然后等待我们自己去挖出这个陷阱,然后,自己再跳进去,这让我想起了苏轼的一首诗:

横看成岭侧成峰, 
远近高低各不同; 
不识庐山真面目, 
只缘身在此山中 
posted @   张占岭  阅读(713)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
点击右上角即可分享
微信分享提示