我是Entity Framework的新手,所以请原谅我,如果我的逻辑偏差/这是事情已经发挥作用的方式,但我正在开发一个应用程序,其中:
ParentId
ParentId
,我将数千条记录存储在ParentId上具有一对多外键关系的子表中。所以,如果父母的信息发生了变化(这种情况可能经常发生),我想做的就是让我的程序执行相当于:
DELETE FROM ChildTable WHERE ParentId = 'xx'
在使用相同ParentId的新/更新值更新子表之前。
从我所看到的情况来看,我要做的就是:
ctx.Database.ExecuteSqlCommand()
种类的概念以最有效的方式在EF中执行此操作的正确方法是什么?
答案 0 :(得分:3)
对于简单的批量删除,我通常只是直接发出一个SQL语句。即:
context.Database
.ExecuteSqlCommand("DELETE FROM TheTable Where MyColumn = {0}", parameter);
如果您需要更高级的支持,那么使用Ef Extended的另一个答案也适用。这只是一种简单的方法,可以进行不需要额外依赖的简单查询。
但请注意,执行此操作时,DbContext的内部缓存可能与您的数据库不同步。因此,在执行这样的命令之后,最好不要再做任何与Object相关的查询,直到你新建了一个上下文。
答案 1 :(得分:2)
批量删除和任何批量更新语句是默认实体框架行为的限制。一种解决方法是使用此扩展库来允许这些批量命令,而无需将实体拉入内存以删除它们。
https://github.com/loresoft/EntityFramework.Extended。它还有关于该网站的良好文档,以及如何使用各种功能。