无法更新分离的实体

时间:2014-08-01 20:46:45

标签: entity-framework

我已经阅读了很多关于此的帖子,我看不出我的情况有何不同,但一定是因为它仍然没有更新。

基本上,我的方法在消息中接收一个分离的实体。我检查它是否已经存在是关键。如果它不存在,我将它添加到数据库中。 (这很好)如果它存在,我想更新它的值。

这是我的代码:

 InteropObject clientObject = (InteropObject)message.ItemToAddUpdate;

 bool exists = context.InteropObjects.Any(o => o.GUID == clientObject.GUID);

 if (!exists)
 {
      context.InteropObjects.AddObject(clientObject);
 }
 else
 {
      context.Attach(clientObject);
      context.ObjectStateManager.GetObjectStateEntry(clientObject).SetModified();
 }

 context.SaveChanges();

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

问题在于,在旧的ObjectContext API中,将状态设置为Modified并未将实体的属性设置为Modified。在DbContext API中,这是通过执行此操作的调用在内部修复的。

ObjectContext API中,您可以通过设置附加实体的属性来获得相同的效果:

context.Attach(clientObject);
var ose = context.ObjectStateManager.GetObjectStateEntry(clientObject);

// Obtain an object array containing current values
var values = new object[ose.CurrentValues.FieldCount];
ose.CurrentValues.GetValues(values);

// "Overwrite" CurrentValues by these values:
ose.CurrentValues.SetValues(values);

因此,您可以按照已有的值设置属性,但这会触发状态管理器将属性标记为Modified