我想在点击某个按钮时根据某些条件删除一些记录。 仅删除这些记录后,我将插入新数据。
dbContext.AdviserFeeDetailReports.AsEnumerable().ToList()
.RemoveAll(x => x.PracticeId == superFund.CompanyID
&& x.SuperFundId == superFund.SuperFundId);
dbContext.SaveChanges();
我想知道为什么它不会从表中删除相关记录。没有异常,上面两行被执行。但是记录仍然存在于DbContext和数据库中。
答案 0 :(得分:15)
您要从列表中删除,而不是从AdviserFreeDetailReports
删除。此外,调用AsEnumerable()
和ToList()
将从数据库中提取整个表并将数据放在单独的列表中,这是您想要的吗?
我相信你的代码会更有效率:
var toRemove = dbContext.AdviserFeeDetailReports
.Where(x =>
x.PracticeId == superFund.CompanyID &&
x.SuperFundId == superFund.SuperFundId);
dbContext.AdviserFreeDetailReports.RemoveRange(toRemove);
dbContext.SaveChanges();
此实现仅提取您计划删除的对象,DbContext
开始跟踪它们。对RemoveRange
的调用将标记每个要删除的对象。最后,SaveChanges
将发出DELETE
语句,最终将从数据库表中删除所有选定的对象。