如果我有一个实现 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 ,也可能在其他地方也可以找到。
答案 0 :(得分:1)
您是否考虑过使用System.Transactions的TransactionScope?这将使您的代码阻塞事务,并在抛出异常时自动回滚更改。
如果使用CommittableTransaction,您可以获得更多的Commit和Rollback控制权,因此您可能需要考虑这一点。