我正在尝试实现乐观并发,
while (true) {
var e = db.MyTable.FirstOrDefault();
try {
// make changes to e
db.SaveChanges();
return;
} catch (DBConcurrencyException ex) {
db.Entry(e).Reload();
if (e == null) return; // <=== this can't be right?!
}
}
如果在我对e进行更改时,另一项作业从数据库中删除了该行,会发生什么情况。会发生什么?SaveChanges会成功吗?
或者,如果在重新加载之前,另一个作业删除了该行怎么办?在这种情况下,重新加载会将e设置为null吗?还是Reload会抛出异常?我整理了文档,但找不到任何提示。
SaveChanges
无法成功-行已不再存在,因此无任何更新。如果成功意味着您将默默地继续下去,那么也不会-它会抛出DbUpdateConcurrencyException
(请注意,您不会 DBConcurrencyException
陷入示例中)。
如果您Reload
删除了实体,则实体的状态为Detached
(db.Entry(e).State
)。方法调用不能将您的e
变量设置为null,即使原则上也不能将其设置为null ref
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句