【问题标题】:Transactions in .Net 2.0 application-- what to use?.Net 2.0 应用程序中的事务——使用什么?
【发布时间】:2009-11-20 22:14:35
【问题描述】:

我正在开发一个 .Net 2.0 应用程序,需要在我的代码中包装一些数据库事务。后端是 SQL Server 2008。

我已经离开 .net 几年了,我最后一次进行任何事务处理是在 .Net 1.1 中使用服务组件。我知道 TransactionScope,并且想知道这是否是现在处理事情的好方法。

另外,在 .Net 3.5 中,我假设还有其他方法可以做到这一点,比如 WCF?只是想知道是否有人可以将我指向一两篇文章。非常感谢。

【问题讨论】:

  • 您可以使用 SqlConnectionSqlCommand 运行原始 SQL 查询并将其包装在事务周围,但我建议考虑使用某种 ORM。运行原始 SQL 查询并不是那么好,它“接近代码”运行,但你不能轻易测试它,一个失误可能意味着你把事情搞砸了。
  • 我还会考虑编写存储过程来封装您需要处理的不同事务。这将使事务范围保持在数据库层。

标签: sql-server-2008 .net-2.0 transactionscope


【解决方案1】:

TransactionScope 是一个很好的方法,只要你控制它。所有 ADO.Net 提供程序都知道 System.Transactions 对象,因此当在 TransactionScope 下操作时,它们将正确登记到后端事务中。

有两个陷阱:

。您可以确定 现有的隔离级别 使用 IsolationLevel 的事务 交易的属性。

  • 分布式事务。在您使用第二个 ADO.Net 连接的那一刻,在事务范围内,TransactionScope 会将它与第一个连接一起登记到分布式事务中,即使两个事务都指向同一个数据库。确保在事务范围内使用一个且仅一个连接。

从技术上讲,最后一点适用于使用 any 资源管理器,但除了数据库连接之外,您不太可能使用任何其他 RM。如果你这样做了,那么无论如何,加入分布式事务是正确的操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-22
    • 2015-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多