我是 Entity Framework 的新手,所以如果我的逻辑有偏差,请原谅我/这是事情已经运作的方式,但我正在开发一个应用程序,其中:
- 我将父信息存储在一个表中,主键 =
ParentId
- 对于每个
ParentId
,我在一个子表中存储了数千条记录,这些记录在 ParentId 上具有一对多的外键关系。
因此,如果 parent 的信息发生变化(这种情况经常发生),我想做的是让我的程序执行等同于:
DELETE FROM ChildTable WHERE ParentId = 'xx'
在使用同一 ParentId 的新值/更新值更新子表之前。
据我所见,我这样做的方式是:
- 使用
ctx.Database.ExecuteSqlCommand()
类概念放入实际的 SQL 命令 - 在某种程度上,实际上循环遍历子元素并将它们设置为在更新数据库上下文之前将其删除(这似乎效率很低,因为我猜它必须从数据库中提取它们才能这样做,我只想将它们全部删除)。
在 EF 中以最有效的方式执行此操作的正确方法是什么?
最佳答案
对于简单的批量删除,我通常直接发出 SQL 语句。即:
context.Database
.ExecuteSqlCommand("DELETE FROM TheTable Where MyColumn = {0}", parameter);
如果您需要更高级的支持,那么使用 Ef Extended 的其他答案也适用。这只是执行不需要额外依赖项的简单查询的简单方法。
但是请注意,这样做时 DbContext 的内部缓存可能会与您的数据库不同步。因此,在执行这样的命令后,最好不要再执行任何与对象相关的查询,直到您创建了一个新的上下文。
关于c# - Entity Framework ——高效删除所有子实体而不加载它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24498366/