В приложении ASP.NET (C #) мы используем Postgres в качестве бэкэнда и Npgsql в качестве поставщика данных.Пару дней назад у нас была серьезная проблема с потерей данных.Я исследовал код и нашел код, подобный этому:
var transaction = connection.BeginTransaction();
//some crud operation here
transaction.Commit()
Кто-то настаивал на том, что Npgsql будет обрабатывать исключение самостоятельно и автоматически откатит транзакцию в случае, если что-то пойдет не так во время транзакций.
На мой взгляд, это довольно оптимистично, и код должен быть заключен в блок try и catch и явно вызвать откат транзакции:
var transaction = connection.BeginTransaction();
try
{
//some crud operation here
transaction.Commit
}catch(Exception ex)
{
transaction.Rollback();
}
Это неправильно?
Кроме того, будет лиоткат транзакции всегда работает?Я где-то читал, что он будет работать только в том случае, если возникнет исключение Postgres, скажем, в случае некорректного sql, но не будет работать в случае исключений другого типа.Может кто-нибудь прояснить этот момент тоже?