我正在实现一个ObservableCollection来管理我的EF实体。当我想编辑某个实体时,我创建了一个实体的克隆,然后在弹出窗口中打开它。当用户完成编辑克隆的实体时,我继续分离原始实体,然后附加新的(克隆和编辑的)实体。
不会发生异常,但不会对数据库进行更新。
以下是执行更新的方法。它是ObservableCollection SetItem方法的重写:
protected override void SetItem(int index, T item)
{
T oldItem = Items.ElementAt(index);
base.SetItem(index, item);
try
{
ContextManager.CurrentObjectContext.Detach(oldItem);
ContextManager.CurrentObjectContext.Attach((IEntityWithKey)item);
ContextManager.CurrentObjectContext.SaveChanges();
}
catch (Exception err)
{
base.SetItem(index, oldItem);
MessageBox.Show(err.Message);
}
}
将极大地帮助任何帮助...
提前致谢, 奥兰
答案 0 :(得分:1)
您的克隆实体不会跟踪更改,因此当您附加它时,它仍处于未更改状态。尝试在附加后添加此行:
ContextManager.CurrentObjectContext.ObjectStateManager.ChangeObjectState(item, EntityState.Modified);
你也可以尝试使用这个:
ContextManager.CurrentObjectContext.DetectChanges(item);