我有一个功能
public TOut PerformDbOperation<TIn, TOut>(Func<IDbConnection, TIn, TOut> method, TIn param1, bool withinTransaction)
{
IDbConnection db = GetNewDbConnection();
OpenConnection(db);
IDbTransaction transaction = null;
if (withinTransaction) {
transaction = db.BeginTransaction();
}
try {
TOut result = method(db, param1);
if (withinTransaction) {
transaction.Commit();
}
return result;
}
finally {
if (withinTransaction) {
transaction.Dispose();
}
CloseConnection(db);
}
}
是否可以修改此函数,以便它可以包装任何方法,无论它是空的还是返回某些东西或需要多少个参数?还是每次添加具有不同数量参数的新方法时都需要编写另一个包装器?
试试这个 :
public TOut PerformDbOperation<TOut>(Function<IDbConnection,TOut> method, bool withinTransaction)
{
IDbConnection db = GetNewDbConnection();
OpenConnection(db);
IDbTransaction transaction = null;
if (withinTransaction) {
transaction = db.BeginTransaction();
}
try {
TOut result = method(db);
if (withinTransaction) {
transaction.Commit();
}
return result;
}
finally {
if (withinTransaction) {
transaction.Dispose();
}
CloseConnection(db);
}
}
并调用方法:
string s = PerformDbOperation((db) => yourMethode(db, param1, param2, param3));
如果您还需要传递不返回任何内容的methode,请使用Action<IDbConnection>
代替Function<IDbConnection,TOut>
。
public void PerformDbOperation(Action<IDbConnection> method, bool withinTransaction)
{
PerformDbOperation((db) =>
{
method(db);
return 0;
}
,withinTransaction); //this will call the other overload thanks to the 'return 0' stamtement
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句