netcore 中 使用 TransactionScope

qq_31381279 2017-11-24 06:16:02
在netcore2.0中使用 TransactionScope是无效的?,有没有人遇到过这种问题?
orm使用的dapper
  using (System.Transactions.TransactionScope scope = new System.Transactions.TransactionScope())
{
using (var conn = SqlConnection())
{
try
{
logger.Trace("事务1:" + System.Transactions.Transaction.Current.TransactionInformation.LocalIdentifier);
//会员积分账户
var wallet = Dao.UserScoreWalletDao.Singleton().QueryAccount(transaction.uid, transaction.pool);
if (!wallet.ok)
{
return Result.NotOk<bool>($"获取会员积分账户错误:{wallet.message}");
}
var result = Dao.UserScoreWalletDao.Singleton().ExecuteTransaction(new UserScoreTransaction()
{
amount = transaction.trans_trade_score,
ctime = DateTime.Now,
kind = UserScoreTransaction.Kind_Income,
notes = $"积分到账[{transaction.id}]",
pool = transaction.pool,
refer = transaction.id.ToString(),
wid = wallet.value.wid
});
if (!result.ok || string.IsNullOrEmpty(result.value))
{
return Result.NotOk<bool>($"会员积分到账错误:{result.message}");
}
scope.Complete();
}
catch (Exception ex)
{
return Result.Exception<bool>(ex);
}
}
}


在 ExecuteTransaction中:
   public Result<string> ExecuteTransaction(T wat)
{
try
{
using (var scope = new TransactionScope(TransactionScopeOption.Required))
{
logger.Trace("事务2:" + System.Transactions.Transaction.Current.TransactionInformation.LocalIdentifier);
var result = ExecuteTransactionIsolate(wat);
if (result.ok)
{
scope.Complete();
}
return result;
}
}
catch (Exception exp)
{
return Result<string>.Exception(exp);
}
}

public Result<string> ExecuteTransactionIsolate(T wat)
{
using (var db = MySqlDB.FromConfiguration(this.DB))
{
//多表数据操作
}
}
...全文
1119 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhujiazhi 2017-11-25
  • 打赏
  • 举报
回复
用过conn.BeginTranscation来做事务的, conn.Execute的时候把事务传进去的
圣殿骑士18 2017-11-25
  • 打赏
  • 举报
回复
TransactionScope不好用,很多情况下都不支持。用1楼的BeginTranscation

13,347

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET技术前瞻
社区管理员
  • .NET技术前瞻社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧