我已经阅读了很多关于此的帖子,我看不出我的情况有何不同,但一定是因为它仍然没有更新。
基本上,我的方法在消息中接收一个分离的实体。我检查它是否已经存在是关键。如果它不存在,我将它添加到数据库中。 (这很好)如果它存在,我想更新它的值。
这是我的代码:
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();
感谢您的帮助!
答案 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
。