Поэтому сразу нужно было писать оптимально - без транзакции
Вот тут могу поспорить =))
В процессе написания кода не всегда получается адекватно оценить оптимальность написанного метода. Просто не хватает взгляда со стороны. Когда смотришь на свой код, над которым ты просидел уже несколько часов, то внимание уже притупляется и очевидные вещи просто не видны.
В этом случае хорошо помогает Code review (и желательно не один раз перед релизом). А в нашем случае - форум )))