擁有2個實體:A *<-->* B
多對多關係和相應的3個表格:A, B, AB
。EF:多對多爲什麼Clear()不會只生成一個sql調用?
嘗試下面的代碼:
var tempA = this.dbContext.A.
.Where(a => a.UID == 1)
.FirstOrDefault();
// {check for null here}
tempA.B.Clear();
this.dbContext.SaveChanges();
似乎產生多個「刪除」 SQL調用數據庫,換每個tempA.B
收集b
(有些奇怪,除非我想念的東西)。所以,如果我有這些2記錄= {(1,2),(1,3)}的AB表,上面的代碼會產生兩個'Delete'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是解析所有的內部引用,並生成一個刪除,他們每個人,而不是一個刪除所有。
你可以嘗試尋找實體框架擴展進行批量更新/刪除:https://github.com/loresoft/EntityFramework.Extended – Thewads
@Thewads :這看起來不錯;這絕對是要記住的東西; – Learner