【发布时间】:2014-08-30 07:17:09
【问题描述】:
在 Dapper 中使用 BeginTransaction() 和 IDbConnection 的正确方法是什么?
我创建了一个必须使用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 仅在需要时打开连接。
在实体框架中,您可以使用TransactionScope 处理事务。
所以我的问题是在 Dapper 中不添加 cn.Open()... 行的情况下处理交易的好习惯是什么?我想应该有一些适当的方法。
【问题讨论】:
标签: c# .net orm dapper idbconnection