我正在使用EF codefirst处理asp.net mvc。我想立刻更新记录列表。等,
foreach(var pat in listpats)
{
context.Entry<Patient>(pat).state=EntityState.Modified;
context.savechanges();
}
它对我来说很好。现在假设如果listpats包含10个项目,如果我在更新时在第7个项目中出现异常。它将保存前6项。但是如果在更新时没有发生错误,我想立即保存所有记录。如果发生任何错误意味着我应该回滚所有以前的更改。那么如何使用EF代码第一模型实现这一目标。请指导我。
答案 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。您的问题让我想知道您是否在不同背景下改变了患者,这就是您手动更改当前环境状态的原因。