Как сделать IEditableObject.EndEdit атомарным? - PullRequest
0 голосов
/ 07 октября 2008

Если у меня есть класс Address, который реализует 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 Ответ

1 голос
/ 07 ноября 2008

Рассматривали ли вы использование TransactionScope от System.Transactions? Это сделает ваш блок кода транзакционным и автоматически откатит изменения, если возникнет исключение.

Вы можете получить больше контроля над Commit и Rollbacks, если вы используете CommittableTransaction, так что вы можете рассмотреть это.

...