博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Entity Framework 同一个上下文中,如何进行对同一个实体进行指定字段更新
阅读量:5922 次
发布时间:2019-06-19

本文共 1203 字,大约阅读时间需要 4 分钟。

转自 

我在上一篇当中介绍了,如何在EF指定字段进行更新。但这个有个缺陷,如果在同一个上下文当中,进行更新的话就会报:

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

问题的原因在于,我们之前已经附加过当前实体,如果再进行Attach的时候,就会报这样的错。

解决办法:1.销毁之前的上下文,重新开启上下文。(等于白说)

              2.更改当前上下文的实体的状态。(这个是问题关键)

如下代码:

//再修改Blog名称,根据主键找到当前实体,判断然后进行更新状态                var entry = dbcontext.Set
().Find(id); if (entry != null) { dbcontext.Entry
(entry).State = System.Data.EntityState.Detached; //这个是在同一个上下文能修改的关键 }

这样就可以了。问题解决。这个是我测试代码。大家可以根据自己的需求进行封装。

附带5个状态解释:

成员名称 说明
Detached 对象存在,但没有被跟踪。 在创建实体之后、但将其添加到对象上下文之前,该实体处于此状态。 An entity is also in this state after it has been removed from the context by calling the Detach method or if it is loaded by using a NoTrackingMergeOption. 没有 ObjectStateEntry 实例与状态为 Detached 的对象关联。
Unchanged 自对象附加到上下文中后,或自上次调用 SaveChanges 方法后,此对象尚未经过修改。
Added 对象为新对象,并且已添加到对象上下文,但尚未调用 SaveChanges 方法。 在保存更改后,对象状态将更改为 Unchanged。 状态为 Added 的对象在 ObjectStateEntry 中没有原始值。
Deleted 对象已从对象上下文中删除。 在保存更改后,对象状态将更改为 Detached。
Modified 对象上的一个标量属性已更改,但尚未调用 SaveChanges 方法。 在不带更改跟踪代理的 POCO 实体中,调用 DetectChanges 方法时,已修改属性的状态将更改为 Modified。 在保存更改后,对象状态将更改为 Unchanged。

 示例代码下载:

 

转自 

转载地址:http://brnvx.baihongyu.com/

你可能感兴趣的文章
48. Rotate Image
查看>>
SPOJ GSS1 & GSS3&挂了的GSS5
查看>>
linux下安装jdk,tomcat,maven
查看>>
selenium - 键盘操作
查看>>
P1010 幂次方
查看>>
AngularJS7那些不得不说的事故
查看>>
使用原理视角看 Git
查看>>
避免头文件重复包含
查看>>
libgdx 3D 渲染优化
查看>>
Shell编程之文本处理
查看>>
洛谷P2178 品酒大会
查看>>
Spring操作mongo排序,限制查询记录数
查看>>
ES6学习入门
查看>>
教育博客有哪些作用?
查看>>
汇编语言之中断学习
查看>>
Eclipse快捷键汇总
查看>>
oracle常用脚本--Physical reads
查看>>
【总结】第二章 实用类
查看>>
jmeter多用户并发
查看>>
使用JDBC处理Oracle大数据
查看>>