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))
{
//多表数据操作
}
}
...全文
1032 2 点赞 打赏 收藏 举报
写回复
2 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
zhujiazhi 2017-11-25
用过conn.BeginTranscation来做事务的, conn.Execute的时候把事务传进去的
  • 打赏
  • 举报
回复
圣殿骑士18 2017-11-25
TransactionScope不好用,很多情况下都不支持。用1楼的BeginTranscation
  • 打赏
  • 举报
回复
相关推荐
发帖
.NET技术前瞻
加入

1.3w+

社区成员

.NET技术 .NET技术前瞻
申请成为版主
帖子事件
创建了帖子
2017-11-24 06:16
社区公告
暂无公告