gpt4 book ai didi

.NET:如何禁用 System.Transactions 中的提升?

转载 作者:行者123 更新时间:2023-12-04 13:35:36 24 4
gpt4 key购买 nike

是否可以在不支持分布式事务的情况下使用 System.Transactions 编程模型?

就像是

  TransactionConfig.DisablePromotion = true;

最佳答案

不,您不能通过属性或配置禁用交易促销。禁用事务提升的唯一方法是避免导致事务被提升为分布式事务的条件。

避免 transaction management escalation你需要:

  • 将 SQL Server 2005 或更高版本作为
    您的数据库
  • 如果是 SQL Server 2005,只使用一个数据库连接
    交易的生命周期。 (SQL Server 2008 允许您在一个事务中使用多个连接而不会发生提升。)
  • 只能访问一个数据库
  • 不传递您的交易
    应用域

  • 规则的原因是为了确保 ACID properties的交易。

    例如,让我们假设您 可以 指定不促进交易(如在您的代码片段中),但您的代码访问两个数据库(我知道 - 您的代码仅使用一个数据库)。所以现在您已经指定不使用分布式事务,您已经启动了一个事务,并且您已经指定两个数据库都应该在同一个工作单元中。事务的 ACID 属性与避免分布式事务的愿望之间存在冲突。在我看来,有两种方法可以处理这个问题:要么将事务提升为分布式事务(你说你不想这样做!)要么抛出异常(因为你不能保证事务的完整性)交易)。

    因此,使用 DisablePromotion 属性没有多大值(value),因为对于不促进事务的应用程序, 您仍然需要遵守升级规则 .

    如果你真的想要,你可以处理 DistributedTransactionStarted事件并在分布式事务启动时抛出异常。这将保证您的应用程序没有使用分布式事务,但这可能不是您想要的。

    关于.NET:如何禁用 System.Transactions 中的提升?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1542605/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com