如果一组操作中的一个操作失败,我在这里没有找到关于如何在sql server上回滚上一个操作的具体帖子。
我有一个查询带来一些数据我用context.saveChanges()
添加一行,然后执行第二次和第三次插入。
好的,这最后一次插入失败,所以我想让db状态达到三次插入之前的状态。
我正在使用EF4和SQL Server 2008 R2 + Asp Net MVC 4 / C#。
交易是唯一的方法吗?
由于这些操作已逐个(以编程方式)保存,而不是只保存在一个context.saveChange()
中,因此我不确定如何执行回滚。
答案 0 :(得分:4)
您可以使用TransactionScope执行此类“嵌套事务”。
将您的逻辑包裹在
中using (var transScope = new TransactionScope())
{
//add something
context.SaveChanges();
//do something else
context.SaveChanges();
if (foo == bar) //check that it worked fine
{
transScope.Commit();
}
}
答案 1 :(得分:0)
好吧,什么都不做。 SaveChanges已在内部使用了一个事务。它是原子的 - 要么保存更改,要么不保存。