我想實現一個邏輯刪除仙境所有我的實體。所有都有一個IsDeleted布爾屬性。我也想級聯協會刪除。我開始通過向datacontext添加實體的部分方法。Linq邏輯刪除與協會
partial void DeleteQuestion(Question instance)
{
instance.IsDeleted = true;
ExecuteDynamicUpdate(instance);
foreach (var answer in instance.Answers)
{
DeleteAnswer(answer);
}
}
這會在ExecuteDynamicUpdate引發錯誤Incorrect syntax near the keyword 'WHERE'
。看看sql分析器,我可以看到set子句是空白的,它不記錄IsDeleted = true;
作爲一個變化。我檢查了IsDeletedChanging事件,它確實被解僱了,但我猜這次更改集已經建立了。
我也嘗試提交更改,而不是調用ExecuteDynamicUpdate,但這引發異常The operation cannot be performed during a call to SubmitChanges.
我看到相同的討論here,唯一的分辨率爲使用存儲過程,我寧願不做。
所以我想讓我們問SO社區,並獲得Google結果頂部的正確答案。這個話題似乎很少。
非常感謝。
有點偏離主題,但迭代所有答案並逐個刪除它們會產生非常差的性能。您應該考慮批量刪除它們。 – 2010-01-29 13:37:35
正確。當我找到更新的方法時,我會重構。 我初期嘗試了db.Answers.DeleteAllOnSubmit(instance.Answers),但是這會引發「在調用SubmitChanges異常期間無法執行的操作」 – madcapnmckay 2010-01-29 13:50:54