背景: Silverlight 4中 - 俄 - 實體框架4上SubmitOperation失敗保持DomainContext最新
說明: 我有一些缺失的代碼中,我做的事:
db.Items.Remove(selectedItem);
db.SubmitChanges(deleteItemOperationCompleted, null);
這裏該項目將從域上下文中刪除,然後服務嘗試在EF上執行操作(然後執行對數據庫的操作)。
回調方法:
private void deleteOperationCompletedM(SubmitOperation op)
{
if (op.Error == null)
{
MessageBox.Show("Delete operation was successfull.");
// Some other code here (removed for brevity)
}
else
{
op.MarkErrorAsHandled();
MessageBox.Show("An error has occured." + op.Error.Message);
}
}
攝製: 我試圖刪除的項目(不能因爲在數據庫中的引用完整性約束被刪除)。我收到錯誤發生的消息。沒關係。當我嘗試刪除某個其他項目(與外鍵無關的任何其他實體)時,我會收到相同的消息,即使此項目可從數據庫中刪除。
問題是我已經從域上下文中刪除了第一項(即使它沒有從數據庫中刪除)。所以當我嘗試刪除第二項時,它也從上下文中刪除。提交更改時,最後一項可能會從數據庫中刪除,但問題在於所做的更改是針對整個上下文提交的,並且由於在第一步中,我已刪除無法從數據庫中刪除的項目,提交操作失敗。
問題:在提交失敗的情況下「回滾」操作的正確方法(最佳實踐)是什麼?我能想到的唯一想法是創建另一個域上下文並再次加載數據,但是我想避免這種情況,因爲數據量很大。上下文可以返回到先前的狀態還是取消待處理的更改?如何解決這個問題?