我有一個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; }
屬性,並用一個類似Title
,User
,EditDate
等,很快失控。將標題,描述等屬性保留爲字符串,但將它們作爲CSV字符串並將所有這些更改填充到較少的一組屬性中。這意味着更多的處理,但實體更簡單。問題在於,將一個CSV片段與來自不同屬性的相應CSV片段相關聯會變得棘手,例如,歷史標題必須與其歷史描述和日期相匹配。
- 兩者都具有當前的一組屬性,還有另一組可空字符,如
TitleHistory
,DescriptionHistory
等,它們是舊版本的CSV字符串,所以在處理歷史事件時它只會變得複雜。
此外,用戶的存儲周圍也存在問題,除非我使用CSV的ID而不是實體。
這個問題的最佳方法是什麼?有各種技術,如sprocs和"insert only" tables - 但我使用實體框架5,所以更喜歡利用我已經使用的技術的解決方案。