关于事务


事务的使用 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开发框架网发布内容,转载请附上原文出处连接
张国生
评论列表

发表评论

评论内容
昵称:
关联文章