我有一個名爲Entry的實體連接到多個TimeWindows。我想清除所有時間窗口,然後添加新窗口。起初我想:刪除實體框架中的所有相關實體
target.TimeWindows.Clear();
但是這並沒有真正刪除,只有試圖刪除關係,這導致了異常,因爲有來自TimeWindows到入口外鍵。後來我想我應該這樣做:
foreach (var tw in target.TimeWindows)
context.DeleteObject(tw);
但這拋出一個異常,以及,因爲收藏是在foreach
語句內修改。所以我想這個:
while (target.TimeWindows.Count > 0)
context.DeleteObject(target.TimeWindows.Last());
但現在我有點擔心使用Count
財產,因爲這可能導致被執行的SQL SELECT COUNT
聲明。可以?如果是,我如何刪除實體框架中的所有時間窗口?
不,「Count」不會觸發數據庫上的「SELECT COUNT」,這更糟糕:-)。它將執行'SELECT * FROM TimeWindows WHERE TargetId = @ P0'並對內存集合進行計數。 – Steven 2012-03-29 09:49:42
哦,我的上帝!那麼你的建議是什麼?! – Rafid 2012-03-29 12:42:03
當你想刪除一個實體時,它應該首先被加載到內存中。所有的O/RM工具都是這樣工作的。實體框架也不例外。如果性能太低,請編寫一個執行刪除操作的存儲過程。 – Steven 2012-03-29 13:31:54