2

我在下面的代码中有对存储过程的不同调用。

我的问题是我希望它在事务中,因此如果其中一个数据库方法失败,那么它将自动回滚待处理的更改。

我已经阅读了 Stackoverflow/Microsoft 页面上的一些文章,其中指出 SubmitChanges 将为我将这些包装在事务中。

问题是 spClearTablesForReplication 方法清除表,后来代码故意失败(用于测试),然后我所有的表都是空的(不回滚)

XalSqlDataContext db = new XalSqlDataContext();
db.spClearTablesForReplication();
db.spUpdateStockItemGroup(ConvertToXElement(typeof(List<StockItemGroup>),    stockItemGroups));
db.spUpdateStockItemSubGroup(ConvertToXElement(typeof(List<StockItemSubGroup>),    stockItemSubGroups));

db.SubmitChanges();

任何线索/解决方案。

4

1 回答 1

7

将您的代码包装在TransactionScopeusing 块中,然后它将回滚,除非它到达您调用transactionScope.Complete().

例子:

using (TransactionScope transactionScope = new TransactionScope())
{
    //code here
    transactionScope.Complete();
}
于 2013-02-15T07:33:22.697 回答