TransactionScope 的优点和缺点是什么?

发布于 2024-09-06 13:32:52 字数 65 浏览 6 评论 0原文

C# 中 TransactionScope 类的优点和缺点是什么?

谢谢。

What are the good and bad points of the TransactionScope class in C#?

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

冷了相思 2024-09-13 13:32:52

MSDN 的一些优点:

TransactionScope 优点

  • 事务内的代码
    范围不仅是交易性的,
    也是可以推广的。本次交易
    从 LTM 开始并且
    System.Transactions 会促进它
    根据需要,根据性质
    其与资源的相互作用
    或远程对象。
  • 范围独立于
    应用程序对象模型——任何一部分
    代码可以使用 TransactionScope 和
    从而成为交易性的。有
    不需要特殊的基类或
    属性。
  • 无需征集资源
    明确地与交易。任何
    System.Transactions 资源管理器
    将检测环境事务
    由范围和创建
    自动入伍。
  • 总的来说,这是一个简单且直观的
    甚至更多的编程模型
    复杂的场景涉及
    事务流和嵌套。

Some advantages from MSDN :

TransactionScope Benefits

  • The code inside the transactional
    scope is not only transactional, it
    is also promotable. The transaction
    starts with the LTM and
    System.Transactions will promote it
    as required, according to the nature
    of its interaction with the resources
    or remote objects.
  • The scope is independent of the
    application object model—any piece of
    code can use the TransactionScope and
    thus become transactional. There is
    no need for special base class or
    attributes.
  • There is no need to enlist resources
    explicitly with the transaction. Any
    System.Transactions resource manager
    will detect the ambient transaction
    created by the scope and
    automatically enlist.
  • Overall, it is a simple and intuitive
    programming model even for the more
    complex scenarios that involve
    transaction flow and nesting.
被你宠の有点坏 2024-09-13 13:32:52

好的一面:

可以在数据库上下文之外进行事务。将记录插入数据库。将文件写入磁盘。

缺点:

需要在使用 TransactionScope 的客户端计算机上访问 MSDTC。

Good side:

Can do transactions beyond database context. Insert record into db. Write file to disk.

Bad side:

Requires MSDTC access on client machine, where TransactionScope is used.

终止放荡 2024-09-13 13:32:52

只是为了补充/澄清 Incognito 提出的要点:

  • TransactionScopes 使 ACID 事务的实现变得简单(即,您不需要编写显式的“回滚”或清理代码)
  • TransactionScope 可以协调数据库、消息队列和事务文件等资源事务
  • Re TransactionScopes 下的系统非常直观 - SQL 等资源将自动/无缝地检测环境事务并登记为可用。

唯一“坏”的一面是您需要注意:

  • TransactionScope 的默认隔离级别是 READ SERIALIZABLE,这通常太“强”并且可能导致阻塞和死锁。建议对大多数事务使用 ReadCommited。
  • 如果 TransactionScope 中使用了多个数据库/多个并发连接/多个资源(例如 SQL 和 MSMQ),TransactionScope 会将事务升级为 DTC。但是,在单线程/单数据库场景中,您通常可以通过在打开新连接之前关闭连接(或始终保持一个连接打开,但不建议这样做)来避免这种情况。

Just to add to / clarify the points Incognito makes:

  • TransactionScopes make the implementation of ACID transactions simple (i.e. so you don't need to write explicit "rollback" or cleanup code)
  • TransactionScope can coordinate resources such as Databases, Message Queues and Transactional File Systems under a transaction
  • Re TransactionScopes are intuitive - resources such as SQL etc will automatically / seamlessly detect the ambient transaction and enlist as available.

The only 'bad' side is that you need to be aware that:

  • The default isolation level of TransactionScope is READ SERIALIZABLE, which is usually too 'strong' and can cause blocking and deadlocking. Would recommend using ReadCommitted for most transactions.
  • TransactionScope will escalate a transaction to DTC if more than one database / more than one concurrent connection / more than one resource (e.g. SQL and MSMQ) are used in a TransactionScope. But you can usually avoided in Single Threaded / single database scenarios by closing connections before opening a new one (or keeping one connection open throughout, which isn't recommended).
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文