我有一个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
将 Title、Description 等属性保留为字符串,但将它们设为 CSV 字符串并将所有这些更改填充到更少的属性集中。这意味着更多的处理,但实体更简单。问题在于,将一个 CSV 片段与来自不同属性的相应片段相关联变得很棘手,例如,历史标题必须与其历史描述和日期相匹配。
- 两者都做,拥有当前的一组属性,以及另一组可空值,如
TitleHistory
,DescriptionHistory
等,它们是旧版本的 CSV 字符串,因此只有在处理历史数据时才会变得复杂。
用户的存储也存在问题,除非我使用 CSV 的 ID 而不是实体。
解决这个问题的最佳方法是什么?有各种技术,例如 sprocs 和“仅插入”表- 但我使用的是 Entity Framework 5,因此更喜欢利用我已经在使用的技术的解决方案。