1

我有一個Task實體各種導航特性,包括一個Comment實體:如何拯救實體的變化歷史

public Comment { 
    public int ID { get; set; } 
    public string Title { get; set; } 
    public string Description { get; set; } 
    public DateTime CreateDate { get; set; } 
    public DateTime LastEditedDate { get; set; } 
    public virtual User User { get; set; } 
} 

註釋可編輯,我想保留的所有這些變化的歷史。想想Stackoverflow允許你編輯你的問題/評論的方式,但保留了更改的歷史記錄。

保持歷史意味着更復雜,並且變得更難以維護。我的選擇:

  • 添加諸如public virtual ICollection<string> DescriptionHistory { get; set; }屬性,並用一個類似TitleUserEditDate等,很快失控。

  • 將標題,描述等屬性保留爲字符串,但將它們作爲CSV字符串並將所有這些更改填充到較少的一組屬性中。這意味着更多的處理,但實體更簡單。問題在於,將一個CSV片段與來自不同屬性的相應CSV片段相關聯會變得棘手,例如,歷史標題必須與其歷史描述和日期相匹配。

  • 兩者都具有當前的一組屬性,還有另一組可空字符,如TitleHistory,DescriptionHistory等,它們是舊版本的CSV字符串,所以在處理歷史事件時它只會變得複雜。

此外,用戶的存儲周圍也存在問題,除非我使用CSV的ID而不是實體。

這個問題的最佳方法是什麼?有各種技術,如sprocs和"insert only" tables - 但我使用實體框架5,所以更喜歡利用我已經使用的技術的解決方案。

回答

0

我已經決定使用「僅插入」表。可惜使用EF5並不容易。