拥有 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();
b
似乎在集合中生成了多个对数据库的“删除”sql调用tempA.B
(有点奇怪,除非我错过了什么)。
所以,如果我有这 2 条记录的 AB 表 = { (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 解析所有内部引用并为它们中的每一个生成一个删除,而不是为所有它们生成一个删除。