当标记要删除的实体并保存更改时,有时操作会因外键约束而失败。在这种情况下,我通知用户并刷新实体。问题是实体没有完全刷新 - 它的外键保持空白。
例如:
//EditableEntity.SomeCollection --> Populated...
ContextManager.CurrentObjectContext.DeleteObject(EditableEntity);
try
{
ContextManager.CurrentObjectContext.SaveChanges();
}
catch (Exception err)
{
ContextManager.CurrentObjectContext.Refresh(System.Data.Objects.RefreshMode.StoreWins, EditableEntity);
}
//EditableEntity.SomeCollection --> Empty!!
请帮忙, 谢谢, 奥兰
答案 0 :(得分:1)
好吧,似乎在重新创建EDM并重建项目后,上述过程运行正常。
结束解决方案:当标记一个对象以进行删除时,它的行为与从对象上下文“分离”失去其相关父项和集合的行为相同,但实际上仍然处于“附加”状态。如果删除操作因任何原因而被取消,则此对象相关对象和集合的使用将引发异常。要解决这个问题,我们需要将对象“附加”回对象上下文。问题是该对象仍然标记为“附加”。
要解决此问题,只需使用以下方法刷新对象:
ContextManager.CurrentObjectContext.Refresh(RefreshMode.StoreWins, item);
希望它有所帮助, 奥兰