linq到sql事务

时间:2013-02-15 07:32:23

标签: c# sql linq transactionscope

下面的代码中包含对存储过程的不同调用。

我的问题是我希望它在一个事务中,所以如果其中一个DB方法失败,那么它将自动回滚挂起的更改。

我已经阅读了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();

任何线索/解决方案。

1 个答案:

答案 0 :(得分:7)

将代码包含在TransactionScope使用块中,然后回滚,除非它到达您调用transactionScope.Complete()的位置。

示例:

using (TransactionScope transactionScope = new TransactionScope())
{
    //code here
    transactionScope.Complete();
}