关于事务


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

发表评论

评论内容
昵称:
验证码:
验证码
关联文章

关于事务
EF事务提交
YES-CMS 内容管理系统 关于本站页面调整
SAP 事务码后缀规律:先看家族,再看最后一个字母
SAP 常用事务代码速查表:ECC 与 S/4HANA T-Code 命名规律及模块清单
SAP S/4HANA MM模块培训 49 - 自动科目确定:MM-FI集成、事务键与OBYC
SAP S/4HANA MM模块培训 35 - 采购事务定制:凭证类型、编号范围与字段控制
YESWinform开发框架关于模块功能不同权限下的布局介绍
关于交易号获取
关于模型生成
关于Epicor函数中Db
关于Epicor函数中Db
关于RazorEngine研究过程中的记录
关于PVE使用命令添加挂载存储
关于PaddleSharp GPU使用 常见问题记录
关于二元插值问题的探讨
关于多人开发时重载功能的使用
EF并发处理,防止并发修改数据
GZDBHelper中ExecuteTransaction方法,在事物内执行
DBHelper SqlSugar EntityFramework 增删改查 性能对比测试