2017-08-08 140 views
-3

我想单击某个按钮时根据某些条件删除一些记录。 删除这些记录后,我将插入新的数据。RemoveAll不会删除记录

dbContext.AdviserFeeDetailReports.AsEnumerable().ToList() 
    .RemoveAll(x => x.PracticeId == superFund.CompanyID 
      && x.SuperFundId == superFund.SuperFundId); 

dbContext.SaveChanges(); 

我想知道为什么它不会从表中删除相关记录。没有发生异常,在两行以上执行。但是记录仍然存在于DbContext和数据库中。

+1

为什么添加这些? * .AsEnumerable()。ToList()* – Robert

+1

当调用'AsEnumerable'时,您需要将完整的数据存储到内存中,只需在本地修改数据。 – HimBromBeere

+0

使列表可枚举。否则,RemoveAll()方法不可用。我甚至在没有AsEnumerable()的情况下尝试,这只与ToList()有关。那也行不通 – ashani123

回答

13

您将从列表中删除,而不是从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语句,这些语句最终将从数据库表中删除所有选定的对象。