Sha*_*pta 2 .net transactions transactionscope
我们使用3层建筑,其中包含SqlHelper - > DAL(数据访问层) - > BAL - > UI
DAL中的任何类都可以调用另一个DAL,任何BAL都可以调用另一个BAL或DAL.
例如.
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
}
Run Code Online (Sandbox Code Playgroud)
display_CusDal
函数应作为事务运行,实体意味着在此函数中进行的任何插入都应与事务对象相关联.
由于display_CusDal可以调用display_ProDal,这可能会也可能不会在另一个事务中的表中插入数据,所以我需要在事务中处理这些.
我应该使用什么方法.
SqlTransactions仅适用于SQL,并要求您显式添加它们的使用.TransactionScope的优点是更多的各方可以加入该交易.所以不仅是SqlTransactions,还包括其他类型的事务.使用事务范围时也会占用大量代码.
另一方面,使用事务范围可能会引入相当一些奇怪的行为.在模糊的情况下,东西会升级到MSDTC.
对于您的情况,交易范围听起来像是最好的选择.通过这种方式,可以非常容易地在单个事务中加入对同一DAL 上的Customer_DAL
和Product_DAL
/或多个操作执行的多个操作.
Customer_DAL
和Product_DAL
混合.我只是想在@pjvds 回复中添加一些关于将事务提升到 MSDTC 的重点。我们曾尝试使用 TransactionScope,它在我们的开发环境中运行良好。我们的代码总是导致提升,但我们的开发机器恰好安装、打开和配置了 MSDTC。然后我们部署到我们的生产服务器,但事情并没有奏效。MSDTC 已关闭。我们的一些生产服务器位于我们无法控制服务器的客户端位置。我们不想要求我们的客户打开和配置 MSDTC。所以我们拿出了 TransactionScope 并推出了我们自己的。
归档时间: |
|
查看次数: |
3105 次 |
最近记录: |