2011-01-20 63 views
1

您好我正在使用EF 4自我跟蹤實體。我有三個表格(問卷,部分和頁面)如下:刪除時EF4循環引用問題

Questionnaire 
Id 
Title 
WhenClosedShowPageId 

Section 
Id 
QuestionnaireId 

Page 
Id 
SectionId 

因此,在EF模型問卷中有章節和章節有頁。 WhenClosedShowPageId是一個可爲空的int,它引用頁面以顯示調查問卷關閉時的情況。所有參考文獻都有關聯以保持參照完整性。

當我將所有實體標記爲已刪除並嘗試保存時,問題就出現了。如果當我檢索數據時,WhenClosedShowPageId爲空,那麼刪除工作正常。如果將WhenClosedShowPageId設置爲一個值,則EF無法確定要刪除的順序。這是可以理解的。但是,如果我將WhenClosedShowPageId設置爲null,則將實體標記爲已刪除並保存,同樣的事情發生。我希望EF首先生成一條更新語句,將數據庫中的WhenClosedShowPageId設置爲null,然後再刪除實體。

我可以看到解決這個問題的唯一方法是自己做兩次獨立保存,第一次將WhenClosedShowPageId設置爲null,第二次刪除實體。這是一個非常分層的應用程序,但我不想爲此創建特殊情況。

有沒有辦法解決這個問題?如果實體已被標記爲刪除

達倫

回答

0

實體框架將丟棄掛起的編輯。畢竟,如果你擺脫了它,首先更新數據有什麼意義?不幸的是,這可能會導致你看到的狀況。

您的問題的最佳解決方案將通過WhenClosedShowPageId不級聯刪除(End1 OnDeleteEnd2 OnDelete設置爲None)使關聯的兩端。由於該頁面是調查問卷一部分的一部分,因此它最終會被刪除,因此您無需擔心。