Каков правильный способ использования BeginTransaction()
с IDbConnection
в Dapper?
Я создал метод, в котором я должен использовать BeginTransaction()
. Вот код.
using (IDbConnection cn = DBConnection)
{
var oTransaction = cn.BeginTransaction();
try
{
// SAVE BASIC CONSULT DETAIL
var oPara = new DynamicParameters();
oPara.Add("@PatientID", iPatientID, dbType: DbType.Int32);
..........blah......blah............
}
catch (Exception ex)
{
oTransaction.Rollback();
return new SaveResponse { Success = false, ResponseString = ex.Message };
}
}
Когда я выполнил выше метод - я получил исключение -
Недействительная операция. Соединение закрыто.
Это связано с тем, что вы не можете начать транзакцию до открытия соединения. Поэтому, когда я добавляю эту строку: cn.Open();
, ошибка будет решена. Но я где-то читал, что ручное открытие соединения - это плохая практика! Dapper открывает соединение только тогда, когда ему нужно.
В структуре Entity вы можете обрабатывать транзакцию с помощью TransactionScope
.
Итак, мой вопрос - хорошая практика для обработки транзакции без добавления строки cn.Open()...
в Dapper? Я предполагаю, что для этого должен быть правильный путь.