Возможно, это действительно пустой вопрос, так как я довольно новичок в обработке транзакций с PetaPoco. Проблема, с которой я сталкиваюсь с использованием PetaPoco в качестве микрокорпорации для обработки транзакции db, заключается в том, что если я сделаю исключение непосредственно перед методом транзакции .Complete(), все будет отброшено правильно, но если я поймаю исключения внутриОперация PetaPoco не откатывается назад
Using scope As PetaPoco.Transaction = db.GetTransaction()
' try/catch here and if the db command fails transaction won't roll back
scope.Complete()
End Using
транзакция не откатится, если одна из операций db завершилась с ошибкой. Как я могу это решить?
Я отредактировал ваш заголовок. Пожалуйста, смотрите: «Если вопросы включают« теги »в их названиях?] (Http://meta.stackexchange.com/questions/19190/), где консенсус« нет, они не должны ». –
Я не знаком с транзакцией PetaPoco. Однако, быстро глядя на код PetaPoco, управление транзакциями кажется забавным и, откровенно говоря, бесполезным в среде Microsoft. Почему бы вам просто не окружить транзакционный код стандартным оператором использования TransactionScope (например: http://msdn.microsoft.com/library/ee818746.aspx), он должен отлично работать с большинством стандартных баз данных. –
Спасибо, Саймон, я думаю, что то, что использует petapoco под капотом, - это инфакт объекта, даже с петапоко, вы не можете откатить транзакцию «вручную», но она работает так: «Если вы хотите отменить транзакцию, вы не должны вызывать метод« Полный »в пределах область транзакции. Например, вы можете выбросить исключение в пределах области действия. Сделка, в которой он участвует, будет отброшена ». Но по какой-то причине я попытался не вызывать .Compete(), но первый db-запрос претерпел то же самое. Кстати, я расскажу о методе .NET .NET и отчитаюсь здесь. – Manight