如何回滚ef代码第一个模型中的先前更改

时间:2012-12-10 10:50:05

标签: asp.net-mvc entity-framework ef-code-first

我正在使用EF codefirst处理asp.net mvc。我想立刻更新记录列表。等,

foreach(var pat in listpats)
{
context.Entry<Patient>(pat).state=EntityState.Modified;
context.savechanges();
}

它对我来说很好。现在假设如果listpats包含10个项目,如果我在更新时在第7个项目中出现异常。它将保存前6项。但是如果在更新时没有发生错误,我想立即保存所有记录。如果发生任何错误意味着我应该回滚所有以前的更改。那么如何使用EF代码第一模型实现这一目标。请指导我。

2 个答案:

答案 0 :(得分:0)

你应该在foreach:

之外调用SaveChanges()
foreach(var pat in listpats)
{
    context.Entry<Patient>(pat).state=EntityState.Modified;
}

context.SaveChanges();

这样一来,如果发生异常,一切都将被回滚

答案 1 :(得分:0)

如果你修改了其他代码中的实体,那么它们的状态将被修改(在同一个上下文中),而不必使用foreach循环和context.Entry(pat).state = EntityState.Modified显式更改它们。

因此,退一步后,在修改了所有患者实体后,单个调用context.SaveChanges()将自动回滚错误。

Soooo总结,改变所有患者实体,然后调用context.SaveChanges(),这将使EF传播所有具有修改状态的实体(当您修改实体时发生状态更改)到DB,context。 SaveChanges()将处理有关回滚的简单案例。

P.S。您的问题让我想知道您是否在不同背景下改变了患者,这就是您手动更改当前环境状态的原因。