如何使IEditableObject.EndEdit原子?

时间:2008-10-07 15:48:43

标签: .net transactions atomic ieditableobject

如果我有一个实现 IEditableObject 的Address类,我可能会有 EndEdit 这样的实现:< / p>

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 < / em> ,可能 _city 应该还原。 此问题不仅限于 EndEdit ,也可能在其他地方也可以找到。

1 个答案:

答案 0 :(得分:1)

您是否考虑过使用System.Transactions的TransactionScope?这将使您的代码阻塞事务,并在抛出异常时自动回滚更改。

如果使用CommittableTransaction,您可以获得更多的Commit和Rollback控制权,因此您可能需要考虑这一点。