2010-11-12 110 views
2

当标记要删除的实体并保存更改时,有时由于外键约束导致操作失败。在这种情况下,我通知用户并刷新实体。问题是实体没有完全刷新 - 其外键保持空白。实体框架刷新实体不刷新其外键

例如:

//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

一些帮助吗? – OrPaz 2010-11-16 08:11:04

回答

1

好,似乎重现了EDM,并重建项目后,上面的程序工作正常。

总结解决方案:标记要删除的对象时,其行为与从对象上下文中“分离”,失去其相关的父级和集合,但实际上仍处于“附加”状态。如果因任何原因取消删除操作,则此对象相关对象和集合的使用将引发异常。为了解决这个问题,我们需要将对象“附加”回对象上下文。问题是该对象仍被标记为“附加”。

为了解决这个问题简单地使用刷新对象:

ContextManager.CurrentObjectContext.Refresh(RefreshMode.StoreWins, item); 

希望它能帮助, 奥兰