Я думаю, что в этом случае нет необходимости (хотя я знаю, что мы можем использовать using
как для транзакции, так и для сеанса). Вот код, который мне интересен:
using(var session = _sessionFactory.OpenSession()){
session.BeginTransaction();
try {
//some code
session.Transaction.Commit();
} catch(Exception ex){
session.Transaction.Rollback();
}
}
Есть ли утечка кода выше? Я знаю, что было бы лучше написать это следующим образом:
using(var session = _sessionFactory.OpenSession()){
using(var t = session.BeginTransaction()){
try {
//some code
t.Commit();
} catch(Exception ex){
t.Rollback();
}
}
}
Однако, как я уже сказал, я задаюсь вопросом о необходимости явно распоряжаться транзакцией. Пожалуйста, порекомендуйте. Кстати, вышеупомянутый код достаточно безопасен (используя / закрывая сразу), чтобы использовать для опроса данных, таких как каждую секунду? Может ли он бомбардировать увеличением количества открытых соединений с целевой базой данных? Я не думаю, что держать соединение с длинным открытием хорошо в любом случае.