关于事务
事务的使用 AOP特性
在方法前增加特性:[TransactionalAttribute<JOCSystemContext>] 即代表方法中的所有JOCSystemContex上下文的操作都是在事务中进行的,事务会在方法执行完毕后自动提交。泛型参数可指定不同的DBContext。业务数据库上下文为 [TransactionalAttribute<JOCBusinessContext>]
例如:
C# 全选
/// <summary>
/// 删除数据
/// </summary>
[Transactional<JOCBusinessContext>]
public async Task<bool> DeleteAsync(req_params_id input, CancellationToken cancellationToken)
{
var data = _businessContext.Query<tce_data_yaohuojihua>(true).Where(w => w.row_id == input.id).FirstOrDefault();
if (data == null)
{
throw new RequestErrorException("数据不存在!", JOCAPI.Core.EnumErrCode.NotData);
}
if (data.approval_status == "Y")
{
throw new RequestErrorException("已经审核,不允许删除!", JOCAPI.Core.EnumErrCode.DataIsApproval);
}
data.is_delete = true;
/// <summary>
/// 明细表-项目点要货需求 明细
/// </summary>
var details = _businessContext.Query<tce_data_yaohuojihua_detail>(true).Where(w => w.doc_id == data.row_id).ToList();
if (details != null && details.Count > 0)
{
foreach (var detail in details)
{
detail.is_delete = true;
}
}
await _businessContext.SaveChangesAsync(cancellationToken);
return true;
}
支持嵌套调用,在特性内部,如果已经开启了事务,则不会在重复开启事务。事务只会由开启者关闭。
手动开启事务
C# 全选
await _businessContext.RunTransactionAsync((db) =>
{
ImportSyncData();
}, cancellationToken);
同理,TrunTransactionAsync也是可以嵌套调用的,内部会自动管理,由开启这关闭事务,比如 ImportSyncData方法
C# 全选
void ImportSyncData()
{
await _businessContext.RunTransactionAsync((db) =>
{
// 执行任务
}, cancellationToken);
}
不必担心事务重复开启引发异常
版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
YESWEB 张国生