在更新分离实体时遇到麻烦



我读了不少关于这个的帖子,我看不出我的情况有什么不同,但肯定是因为它仍然没有更新。

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

下面是我的代码:
 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();

谢谢你的帮助!

问题是,在旧的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

最新更新