如何在业务逻辑层实现事务处理

4

我在我的asp.net应用程序中使用企业库数据访问块。 我想要从业务逻辑层实现跨多个存储过程的事务。Entlib为数据库访问打开新连接。以下方式使用Transaction Scope会导致分布式事务吗?

using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required))
{
    // calling necessary DAL methods
   scope.Complete();
}  

有没有更好的方法来实现BLL中的事务?

1个回答

0

如果您正在谈论后端 SQL Server,则取决于服务器版本。这是一篇好文章:DO.NET 和 System.Transactions

我引用:

TransactionScope 足够聪明,除非必要,否则不会创建具有全部开销的完全分布式事务。如果涉及事务的资源是不稳定的,则所有内容都将保留在内存中,Microsoft 分布式事务协调器(DTC)将不会参与其中。如果该资源是连接到 SQL Server 2005,则 DTC 将不会参与其中,而 SQL Server 2005 将处理该事务。这等同于打开一个内部 SQL 事务。如果使用 SQL Server 2000,则将解析为使用完整的 DTC 事务。


好的文章。我在事务范围内检查了Transaction.Current.TransactionInformation.DistributedIdentifier。值为Guid.Empty {00000000-0000-0000-0000-000000000000},所以我猜这个事务仍然是轻量级的,尽管我在同一个事务范围内进行了多次访问SQL服务器。 - developer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接