[英]How to use transaction through multiple layer code in C#
假设我的项目就像.net petshop 。 它有一个BLL,DAL和SQLHelper。
通常,我在我的web层中调用BLL函数,BLL函数调用DAL函数,最后,DAL调用sqlhelper。
但在某些情况下,我进行了交易。
例如:
网络层:
我需要调用一些BLL函数。 代码如下:
var m = BLLFunction_1();
var n= BLLFunction_2();
if (m+n<100)
{
// need rollback here
}
else
{
BLLFunction_3();
// commit here
}
因此,我必须在Web层中使用事务对象,将其传递给BLL函数,并将BLL层传递给DAL层,最后将其传递给SQLHelper。
那有点难看。
我想知道这种情况的优雅方式是什么。
我假设您正在寻找ADO.NET中的Transaction。
基本上,您需要将“操作”包装到TransactionScope中。
try
{
using(TransactionScope ts = new TransactionScope())
{
//perform SQL
using(SqlHelper sh = new SqlHelper())
{
//do stuff
}
//call new DAL function
//call other DAL function
ts.Complete();
}
}
catch(Exception ex)
{
throw ex;
}
嗨,在您的BLL函数中创建Transaction,并使用TransactionScopeOption
public void BLLFunction_1()
{
using(TransactionScope ts = new TransactionScope(TransactionScopeOption.Required))
{
//do ur stuff here
ts.Complete();
}
}
public void BLLFunction_2()
{
using(TransactionScope ts = new TransactionScope(TransactionScopeOption.Required))
{
//do ur stuff here
ts.Complete();
}
}
使用TransactionScopeOption:范围需要事务。 它使用环境事务(如果已存在)。 否则,它会在进入范围之前创建新事务。 这是默认值。 所以这里你的BLLFunction_2将使用BLLFunction_1的Transaction而不是创建new。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.