如何使 IEditableObject.EndEdit 原子化?

问题描述 投票:0回答:1

如果我有一个实现 IEditableObject 的 Address 类,我可能会有这样的 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,其他地方也可能存在。

.net transactions ieditableobject
1个回答
1
投票

您是否考虑过使用 System.Transactions 中的 TransactionScope?这将使您的代码块具有事务性,并且如果引发异常,将自动回滚更改。

如果使用 CommittableTransaction,您可以获得对提交和回滚的更多控制,因此您可能需要考虑这一点。

© www.soinside.com 2019 - 2024. All rights reserved.