在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
。这种方法的问题在于它仅在基本方案中有效。它不适用于实体拆分或某些继承映射,在这种情况下,您需要为每个实体删除两个或多个记录。
在过去的2-3天里,我已经用weblogic+JTA使Spring4.x、Hibernate4.x与weblogic+JTA一起工作 我需要(我认为我需要)配置的东西之一是: 我在hibernate-hibernate-3.1.3.jar 中看到了这个类,但在hibernate-hibernate-core-4.3.10.final.jar中没有看到这个类 谷歌没有告诉我任何事情,我得到的只是3.
请让我知道在Spring data JPA中做这件事的简单方法。
我有一个User类,它有一些附加属性: 现在,如果我调用一些方法来改变其中一个房子(例如改变它的名称属性),如果我调用,我仍然会得到房子的旧值: 我如何确保它总是更新?
当我试图删除宠物时,我得到了这个错误。这个宠物,有访问(子),但我在宠物实体中定义了CASCADE. ALL。任何想法?错误:无法删除或更新父行:外键约束失败(。 访问类:
我有父实体和一个方向作为具有关系的子实体。我尝试使用Hibernate查询删除超过一周的广告,但得到的结果是: com.mysql.jdbc.exceptions.jdbc4.mysqlintegrityConstraintViolationException:无法删除或更新父行:外键约束失败(.,constraint外键()引用() 用户: 筛选器: 广告: DAO删除方法:
我试图从MySQL中的多个表中删除记录,但我不断得到一个错误,错误内容为。 这是我正在尝试运行的SQL语句: 我试过在删除级联上执行