Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 在我的体系结构中使用什么-SqlTransaction或TransactionScope_.net_Transactions_Transactionscope - Fatal编程技术网

.net 在我的体系结构中使用什么-SqlTransaction或TransactionScope

.net 在我的体系结构中使用什么-SqlTransaction或TransactionScope,.net,transactions,transactionscope,.net,Transactions,Transactionscope,我们使用3层架构,其中包含 SqlHelper->DAL(数据访问层)->BAL->UI DAL中的任何类都可以调用另一个DAL,就像任何BAL调用另一个BAL或其自身的DAL一样 例如 display\u CusDal函数应作为事务运行,intern表示在该函数中进行的任何插入都应与事务对象相关联 由于display_CusDal可以调用display_ProDal,它可能会也可能不会在另一个事务的表中插入数据,所以我需要在事务中处理这些数据 我应该使用什么方法 SqlTransactions

我们使用3层架构,其中包含 SqlHelper->DAL(数据访问层)->BAL->UI

DAL中的任何类都可以调用另一个DAL,就像任何BAL调用另一个BAL或其自身的DAL一样

例如

display\u CusDal
函数应作为事务运行,intern表示在该函数中进行的任何插入都应与事务对象相关联

由于display_CusDal可以调用display_ProDal,它可能会也可能不会在另一个事务的表中插入数据,所以我需要在事务中处理这些数据


我应该使用什么方法

SqlTransactions只与SQL一起工作,需要您显式地添加它们的用法。TransactionScope的优点是可以有更多的参与方加入交易。因此,不仅是SqlTransactions,还有来自其他类型的事务。在使用事务作用域时,也会删除很多代码

另一方面,使用事务作用域可以引入相当多的wierd行为。在模糊的情况下,材料会上报给MSDTC

对于您的情况,事务范围听起来是最好的选择。通过这种方式,可以很容易地在单个事务中连接在
客户数据集
产品数据集
上执行的多个操作,或在同一数据集上执行的多个操作

SqlTransactions的Pro
  • 容易理解
  • 明确的
  • 你有完全的控制权
SqlTransaction的Con
  • 需要更多的代码
  • 更难加入更多的政党
  • 更难加入其他事务
  • 将事务绑定到SQL(因此切换到其他持久存储时不支持)
用于TransactionScope的Pro
  • 易于使用
  • 使您的代码保持简单,您无需担心
    Customer\u DAL
    Product\u DAL
    的混合
  • 伟大的交易管理开箱即用。当使用多个数据库时,包括升级到MSDTC
交易范围的Con
  • 当升级发生时模糊

我只想在@pjvds回复中强调将事务提升到MSDTC。我们尝试过使用TransactionScope,它在我们的开发环境中非常有效。我们的代码总是导致提升,但我们的开发机器恰好安装、打开并配置了MSDTC。然后我们部署到生产服务器上,但一切都不起作用。MSDTC已关闭。我们的一些生产服务器位于我们无法控制服务器的客户端位置。我们不想要求我们的客户打开并配置MSDTC。所以我们拿出了TransactionScope,推出了我们自己的。

感谢您的回复。“升级发生时含糊不清。”我不清楚会发生什么升级。我对交易范围很陌生。对我来说,在单个数据库上使用所有事务时,性能成本似乎很简单。但是TransactionScope中会发生什么升级。@ShantanuGupta TransactionScope可以将事务升级到MSTDSC,这是一种分布式事务服务,当多方加入事务时使用。例如,多个数据库。因此,当查询单个事务范围内的多个数据库时,事务管理器会将事务升级到MSDTSC。关于升级(以及问题)的大部分信息可以在这里阅读:一个重要的注意事项是,到同一数据库的多个连接也会升级事务。
class Customer_DAL { display_CusDal(); }
class Customer_BAL { display_CusBal(); }   

class Product_DAL { display_ProDal(); }
class Product_BAL { display_ProBal(); }


display_CusDal()
{
 //call display_ProDal()
 //Do some work
}