2010-07-16 91 views
3

我的任务是证明或反驳.net中的交易支持。我们都知道TransactionScope可以处理提交/回滚等简单的事情,例如在3个不同的表中插入3条记录,然后删除其他5个表中的5条记录。.net TransactionScope处理非常复杂的数据库事情吗?

我的团队不太确定TransactionScope如果这些插入/删除触发器可以正确处理事务。或者如果我们执行一个拥有自己的嵌套事务的SP。

.net事务支持处理这些更复杂的情况吗?你是否必须指定任何不太明显的选项来使其全部工作?

我听说我们的一些SP可能会导致我们的问题,因为有几个提交子交易。有谁知道这个特定的场景是否由TransactionScope处理?

回答

2

我们使用TransactionScope处理一些非常复杂和冗长的数据库操作,涉及数十个或更多表中的数千行。它处理它就好了。但是,IMO不希望在存储过程和/或触发器中启动和提交事务。您应该让您的调用(C#)代码处理该事务。通过在较低的存储过程级别处理事务,您失去了很大的灵活性。

另外,使用TransactionScope时要小心,以限制自己到单个连接对象。如果您不这样做,交易将升级到MTC交易,这需要MTC服务在客户端和服务器上运行。

+0

我假设你使用了不少SP和触发器?我的团队(我不是那么多)特别担心有自己的嵌套交易的SP。此外,我们有一些触发器/索引必须保持完整性,如果我们在table1-column1上插入触发器,则会插入到table2-column2中,如果这些表已经不同步,那将非常糟糕。 你可以提供的任何阐述将非常感激。感谢您的初始响应。 – Sublimemm 2010-07-16 18:54:01

+0

感谢MTC提示,我们已经遇到了这个问题,并让它在两台客户端服务器上运行。如果只有我几个月前可以阅读你的评论,我将不会花费3天的时间来搞清楚为什么我的SIMPLE语句不工作:0 – Sublimemm 2010-07-16 18:55:25

+1

@Sublimemm - 你可以有任意数量的触发器,尽可能多的表。 TransactionScope的使用将处理这个提交和回滚就好了。但是,您要求在存储过程中提交或回滚事务时出现问题。你不应该这样做(海事组织)。 – 2010-07-16 18:55:28