ASP.NET 核心 EF DbUpdateConcurrencyException
ASP.NET Core EF DbUpdateConcurrencyException
我试图在我的 ASP.NET 核心网站中手动实施级联删除。
因此,我得到了一个基于 3 个实体的投票部分:PollQuestion、PollOption、PollAnswer。
我从删除所有答案开始,一切顺利,然后我开始使用以下代码删除选项:
if (answersDeleted) {
options = GetOptionsList(_pollID);
context.PollOption.RemoveRange(options);
context.SaveChanges();
return true;
} else {
return false;
}
当执行 SaveChanges()
时,我得到这个异常:
Microsoft.EntityFrameworkCore.DbUpdateConcurrencyException: 数据库操作预期影响 1 行但实际上影响了 2 行。加载实体后数据可能已被修改或删除。
所以。我真的不明白为什么他期望影响 1 行,因为我将列表传递给 RemoveRange()
。
以防有一天有人可以利用它....我发现了问题,它与我发布的代码块并不严格相关;几天前我修改了投票 table,并将键从单个字段键更改为复合键,然后我忘记在我的模型中反映这一变化,它仍然使用单个键。它没有返回任何错误,所以我没有注意到这一点,直到我不得不在数据库上做其他事情并且在那里我发现了问题。
我试图在我的 ASP.NET 核心网站中手动实施级联删除。 因此,我得到了一个基于 3 个实体的投票部分:PollQuestion、PollOption、PollAnswer。 我从删除所有答案开始,一切顺利,然后我开始使用以下代码删除选项:
if (answersDeleted) {
options = GetOptionsList(_pollID);
context.PollOption.RemoveRange(options);
context.SaveChanges();
return true;
} else {
return false;
}
当执行 SaveChanges()
时,我得到这个异常:
Microsoft.EntityFrameworkCore.DbUpdateConcurrencyException: 数据库操作预期影响 1 行但实际上影响了 2 行。加载实体后数据可能已被修改或删除。
所以。我真的不明白为什么他期望影响 1 行,因为我将列表传递给 RemoveRange()
。
以防有一天有人可以利用它....我发现了问题,它与我发布的代码块并不严格相关;几天前我修改了投票 table,并将键从单个字段键更改为复合键,然后我忘记在我的模型中反映这一变化,它仍然使用单个键。它没有返回任何错误,所以我没有注意到这一点,直到我不得不在数据库上做其他事情并且在那里我发现了问题。