小编典典

在EntityFramework中更新或删除多个实体的推荐做法是什么?

sql

在SQL中,有时可能会写类似

DELETE FROM table WHERE column IS NULL

或者

UPDATE table SET column1=value WHERE column2 IS NULL

或可能适用于多行的任何其他条件。

据我所知,最好的EntityFramework可以做的是

foreach (var entity in db.Table.Where(row => row.Column == null))
    db.Table.Remove(entity);   // or entity.Column2 = value;
db.SaveChanges();

但是,当然,这将检索所有实体,然后为每个实体运行一个单独的DELETE查询。如果有许多实体都满足条件,那肯定会慢很多。

因此,简而言之,EntityFramework中是否支持在单个查询中更新或删除多个实体?


阅读 149

收藏
2021-04-07

共1个答案

小编典典

EF不支持批量更新或删除,但您可以执行以下操作:

db.Database.ExecuteSqlCommand("DELETE FROM ...", someParameter);

编辑:

真正想使用LINQ查询的人有时会使用变通方法,在该方法中,他们首先从LINQ查询中创建选择SQL查询:

string query = db.Table.Where(row => row.Column == null).ToString();

之后,找到的第一个匹配项,FROM并用替换查询的开头,并用DELETE执行结果ExecuteSqlCommand。这种方法的问题在于它仅在基本方案中有效。它不适用于实体拆分或某些继承映射,在这种情况下,您需要为每个实体删除两个或多个记录。

2021-04-07