【发布时间】:2012-02-17 10:14:21
【问题描述】:
我之前问过 Converting using SqlConnection to Func delegate
如何使用以下委托使用同一事务进行多次调用? 更复杂的是,其中一个调用我希望返回一个值。
我有以下委托函数定义
protected TResult UsingSqlTransaction<TResult>(Func<SqlTransaction, TResult> myFunction)
{
using (SqlConnection sqlConn = new SqlConnection(ConnectionString))
{
sqlConn.Open();
using (SqlTransaction sqlTrans = sqlConn.BeginTransaction())
{
var result = myFunction(sqlTrans);
sqlTrans.Commit();
return result;
}
}
}
当前使用情况
public Guid? InsertUpdate(News entity)
{
return UsingSqlTransaction(sqlTrans => data.InsertUpdate(sqlTrans, entity));
}
解决方案 - 查看接受的答案
public Guid? InsertUpdate(News entity)
{
return UsingSqlTransaction(sqlTrans =>
{
var token = data.InsertUpdate(sqlTrans, entity);
data.DoSomethingElse(sqlTrans, entity);
return token;
});
}
//-- The above UsingSqlTransaction remains unchanged
【问题讨论】:
-
到底是什么问题?
-
如何更改委托以使用同一个 sql 事务进行多次调用?