Код: Выделить всё
private ItemEx Update(ItemSavable savable, bool changedByWorkflow, Dal.Entities.Data.User currentUser)
{
var item = itemRepository.GetById(savable.Id);
var oldItem = item.Clone();
using (var transaction = new PpmTransaction())
{
try
{
// Statement 1 - Database UPDATE
item = itemRepository.SaveAndReturnEntity(savable);
// Statement 2 - Database INSERT
eventService.Trigger(new ItemStatusChangeEvent(statusChangedUser, item, oldItem));
// Statement 3 - Database UPDATE of several rows + INSERT
itemModifiedRepository.Add(item.Id, item.StatusId, DateTime.UtcNow, statusChangedUser.Id)
}
catch
{
itemRepository.DeleteCacheItem(item.Id);
throw;
}
transaction.Commit();
}
return item;
}
Поскольку наши клиенты заметили это странное поведение по последствиям утверждения 2, в качестве первоначального «грязного исправления» я поменял местами положения Утверждения 2 и Утверждения 3.
- Теперь первый оператор правильно отменён. Второй оператор не отменяется, а последний оператор вообще не выполняется из-за выброшенного исключения.
Подробнее здесь: https://stackoverflow.com/questions/787 ... nts-except