【发布时间】:2013-08-26 21:01:43
【问题描述】:
拥有 2 个实体:A *<-->* B多对多关系和对应的 3 个表:A, B, AB。
尝试以下代码:
var tempA = this.dbContext.A.
.Where(a => a.UID == 1)
.FirstOrDefault();
// {check for null here}
tempA.B.Clear();
this.dbContext.SaveChanges();
似乎在tempA.B 集合中为每个b 生成对数据库的多个“删除” sql 调用(有点奇怪,除非我错过了什么)。
所以,如果我的 AB 表有这 2 条记录 = { (1,2) , (1,3) } ,上面的代码会产生两个“删除”sql 调用(一个用于 b=2,另一个用于 b= 3),像这样:
1. DELETE FROM AB WHERE (A_UID = 1) AND (B_UID = 2)
and
2. DELETE FROM AB WHERE (A_UID = 1) AND (B_UID = 3)
但我想要一些 EF 代码,它可以产生如下简单的东西?
DELETE FROM AB WHERE (A_UID = 1)
编辑:我不明白为什么 EF 解析所有内部引用并为它们中的每一个生成一个删除,而不是为所有它们生成一个删除。
【问题讨论】:
-
您可以尝试查看扩展的实体框架以进行批量更新/删除:github.com/loresoft/EntityFramework.Extended
-
@Thewads:这看起来不错;这绝对是要记住的事情;
标签: c# sql sql-server entity-framework many-to-many