C# linq到sql事务

C# linq到sql事务,c#,sql,linq,transactionscope,C#,Sql,Linq,Transactionscope,我有以下代码,其中包含对存储过程的不同调用 我的问题是,我希望它在事务中,因此如果其中一个DB方法失败,它将自动回滚挂起的更改 我读过Stackoverflow/Microsoft页面上的一些文章,其中指出提交的更改将为我将这些事务打包 问题是spClearTablesForReplication方法会清除表,随后代码会故意失败(用于测试),然后我的所有表都是空的(不会回滚) XalSqlDataContext db=new XalSqlDataContext(); db.spClearTabl

我有以下代码,其中包含对存储过程的不同调用

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

我读过Stackoverflow/Microsoft页面上的一些文章,其中指出提交的更改将为我将这些事务打包

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

XalSqlDataContext db=new XalSqlDataContext();
db.spClearTablesForReplication();
db.spUpdateStockItemGroup(ConvertToXElement(typeof(List),stockItemGroups));
db.spUpdateStockItemSubGroup(ConvertToXElement(typeof(List),stockItemSubGroups));
db.SubmitChanges();

这方面的任何线索/解决方案。

使用block将代码包装在
TransactionScope
中,然后它将回滚,除非它达到调用
TransactionScope.Complete()的点

例如:

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

所以,如果我这样做了,那么我就不需要再进行提交更改了?@user1914109您的代码中应该没有其他更改。您认为应该是事务性的操作(全部或无)您应该使用块将其包装在transactionScope中,而不是您现在使用的代码不应更改。因此,结论SubmitChanges不会将db调用包装在事务中?@user1914109是的,SubmitChanges会将其自己的操作包装在事务中,但如果存在环境事务,它将使用环境事务。这意味着当您使用事务作用域时,SubmitChanges将登记在已经运行的事务中,并且所有事情都将在单个事务中发生。如果是,则在交易前或交易后查看。完成
using (TransactionScope transactionScope = new TransactionScope())
{
    //code here
    transactionScope.Complete();
}