gpt4 book ai didi

entity-framework - 如果我对已删除的实体调用 EF Reload 会怎样?

转载 作者:行者123 更新时间:2023-12-05 04:13:43 25 4
gpt4 key购买 nike

我正在尝试实现乐观并发,

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 会成功吗?

或者如果在重新加载之前,另一个作业删除了该行怎么办?在这种情况下,Reload 会将 e 设置为 null 吗?还是 Reload 会抛出异常?我擦洗了文档,但找不到任何提示。

最佳答案

SaveChanges 无法成功 - 此处不再有行,因此无需更新。如果成功意味着它会默默地继续,那么也不会 - 它会抛出 DbUpdateConcurrencyException (注意,不是 DBConcurrencyException 你在你的例子中捕获) .

如果您Reload 删除了实体,它的状态将是Detached (db.Entry(e).State)。方法调用不能将您的 e 变量设置为 null,即使在原则上也是如此 - 它不是由 ref 传递的。

关于entity-framework - 如果我对已删除的实体调用 EF Reload 会怎样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36990293/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com