Entity Framework 同一个上下文中,如何进行对同一个实体进行指定字段更新
2013-03-13 10:30
357 查看
我在上一篇EF更新指定的字段当中介绍了,如何在EF指定字段进行更新。但这个有个缺陷,如果在同一个上下文当中,进行更新的话就会报:
问题的原因在于,我们之前已经附加过当前实体,如果再进行Attach的时候,就会报这样的错。
解决办法:1.销毁之前的上下文,重新开启上下文。(等于白说)
2.更改当前上下文的实体的状态。(这个是问题关键)
如下代码:
这样就可以了。问题解决。这个是我测试代码。大家可以根据自己的需求进行封装。
附带5个状态解释:
示例代码下载:UpdateMoreField.zip
ObjectStateManager 中已存在具有同一键的对象。ObjectStateManager 无法跟踪具有相同键的多个对象
问题的原因在于,我们之前已经附加过当前实体,如果再进行Attach的时候,就会报这样的错。
解决办法:1.销毁之前的上下文,重新开启上下文。(等于白说)
2.更改当前上下文的实体的状态。(这个是问题关键)
如下代码:
//再修改Blog名称,根据主键找到当前实体,判断然后进行更新状态 var entry = dbcontext.Set<Blogs>().Find(id); if (entry != null) { dbcontext.Entry<Blogs>(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。 |
相关文章推荐
- Entity Framework 同一个上下文中,如何进行对同一个实体进行指定字段更新
- SQL如何更新一个字段中指定的值。
- 如何根据给一个字段的值分类进行样式设计
- Sqlserver 如何对一个字段的不同值进行统计
- [MySQL FAQ]系列 -- 如何为一个字段指定字符集
- sql优化:从设计表结构开始(SQL Server中如何让数据库中某一个字段随时间自动更新?)
- mysql如何取出为null的字段并进行更新
- MYSQL 如何对一个字段进行分类统计
- 更新数据库所有表的某一个指定字段
- 一个表里有多个字段需要同时使用字典表进行关联显示,如何写sql查询语句
- mysql中如何将查询结果的多个记录中的指定字段放到一个二维数组中,以及在in子句中使用数组
- mysql如何更新一个表中的某个字段值等于另一个表的某个字段值
- 如何对一个不断更新的HashMap进行排序
- mysql中如何更新一个字段的值为它本身的值连接上一个字符串
- Thinkphp中如何书写按照指定字段同步更新的ORM
- 关于实体为Date类型的字段,如何用model.find(" date>? ",param)方法进行查询?
- 更新数据库所有表的某一个指定字段 ,附加对‘将 varchar 值转换为数据类型为 int 的列时发生语法错误’处理方法
- SQL SERVER 同一个表并且是同一个时间字段进行相减
- [MySQL FAQ]系列 -- 如何为一个字段指定字符集
- mysql中如何更新一个字段的值为它本身的值连接上一个字符串