在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中是否支持在单个查询中更新或删除多个实体?
EF不支持批量更新或删除,但您可以执行以下操作:
db.Database.ExecuteSqlCommand("DELETE FROM ...", someParameter);
编辑:
真正想使用LINQ查询的人有时会使用变通方法,在该方法中,他们首先从LINQ查询中创建选择SQL查询:
string query = db.Table.Where(row => row.Column == null).ToString();
之后,找到的第一个匹配项,FROM并用替换查询的开头,并用DELETE执行结果ExecuteSqlCommand。这种方法的问题在于它仅在基本方案中有效。它不适用于实体拆分或某些继承映射,在这种情况下,您需要为每个实体删除两个或多个记录。
FROM
DELETE
ExecuteSqlCommand