2008-10-07 27 views
0

如果我有一個實現IEditableObject Address類,我可能有EndEdit中實現這樣的:如何使IEditableObject.EndEdit成爲原子?

public void EndEdit() 
{ 
    // BeginEdit would have set _editInProgress and save to *Editing fields 
    if (_editInProgress) 
    { 
     _line1 = _line1Editing; 
     _line2 = _line2Editing; 
     _city = _cityEditing; 
     _state = _stateEditing; 
     _postalCode = _postalCodeEditing; 
     _editInProgress = false; 
    } 
} 

如果在_City異常,則_line1_line2,可能還有_city應該恢復。 此問題不限於EndEdit但可能在其他地方也可以找到。

回答

1

你有沒有考慮從System.Transactions使用TransactionScope?這會使你的代碼塊事務化,並且如果拋出異常,它將自動回滾更改。

如果您使用CommittableTransaction,那麼您可以獲得對Commit和Rollback的更多控制權,因此您可能需要考慮這一點。