下面的代码中包含对存储过程的不同调用。
我的问题是我希望它在一个事务中,所以如果其中一个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();
任何线索/解决方案。
答案 0 :(得分:7)
将代码包含在TransactionScope
使用块中,然后回滚,除非它到达您调用transactionScope.Complete()
的位置。
示例:
using (TransactionScope transactionScope = new TransactionScope())
{
//code here
transactionScope.Complete();
}