2012-01-13 188 views
1

我有一個類問題EF代碼優先外鍵

CompareItems存儲CurrentQuestion到其他問題的比較信息。

public class Question 
{ 
    public virtual ICollection<QuestionMark> CompareItems { get; set; } 
} 


public class QuestionMark 
{ 
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int Id { get; set; } 
    public int Question { get; set; } //Store ID of OtherQuestion 
    public decimal Mark { get; set; } 
} 

當我刪除了一些質疑,我需要所有的問號,其中QuestionMark.Question == A.Id也刪除了,因爲它是沒有必要有,如果不存在問題的信息進行比較。如何能夠做到這一點而不進行QuestionMark.Question實體?也許EF有良好的API一些規則來設置QuestionMark.Question是問題的實體外鍵?

我不慣於做QuestionMark.Question爲實體,因爲這將需要改變目前的解決方案很多 - 是第一。此外,問題是一個相當重實體,並將其裝載到多個時間分配值或刪除或別的東西,會按業績

回答

1

我認爲可以更改應用程序使用實體而不是id,因爲EF默認使用延遲加載,並且不會導致性能問題。我認爲只需使用id而不是實體,可以使用一些流暢的API設置或屬性。

0

如果你不想做一個導航屬性QuestionQuestionMark類,那麼你需要通過「級聯刪除」手動創建外鍵。然後,當每一個問題被刪除數據庫將刪除相關QuestionMark記錄。

但是這種方法有EF問題。由於EF不知道有這些實體之間的「級聯刪除」的關係。因此EF中的本地跟蹤實體可能存在不一致。

你還沒有給出你爲什麼不想在EF中映射關係的理由,但我強烈建議你不要這樣做。

+1

要添加,如果原因是「因爲我想從QuestionMark對象訪問問題編號」,則可以公開外鍵屬性和導航屬性。 – hvd 2012-01-13 08:57:54