c# - Entity Framework ——高效删除所有子实体而不加载它们

标签 c# .net vb.net entity-framework

我是 Entity Framework 的新手,所以如果我的逻辑有偏差,请原谅我/这是事情已经运作的方式,但我正在开发一个应用程序,其中:

  1. 我将父信息存储在一个表中,主键 = ParentId
  2. 对于每个 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/

相关文章:

C# 基本类型(double、int 等)和 Struct 差异

c# - 性能 : assign boolean value always or check value first?

.net - 更改为发布构建配置时,NuGet 引用无效

c# - 需要 .NET 代码仅在调试配置时执行

vb.net - 乌尔都语在vb.net的文本框中编写

mysql - VB.NET SQL 数据库登录

c# - 更改默认 View 引擎的 View 搜索行为

c# - 从 .NET 代码中提取数据

c# - 没有管理权限的本地主机上的自托管 REST API

mysql - 获取当前登录用户