如何保存实体的更改历史记录

时间:2013-01-17 10:53:03

标签: c# database entity-framework database-design entity-framework-5

我有一个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等类似的属性。它会很快失控。< / p>

  • 将标题,描述等属性保留为字符串,但将它们设为CSV字符串,并将所有这些更改填充到更少的属性集中。这意味着更多的处理,但实体更简单。问题是将一个CSV片段与来自不同属性的相应片段相关联变得棘手,例如,历史标题必须与其历史描述和日期相匹配。

  • 同时执行这两项操作,拥有当前的一组属性,以及另一组nullables,例如TitleHistoryDescriptionHistory等,它们是旧版本的CSV字符串,所以它只会变得复杂你正在处理历史事物。

除非我使用ID而不是实体的CSV,否则用户存储存在问题。

解决这个问题的最佳方法是什么?有各种技术,如sprocs和"insert only" tables - 但我使用的是Entity Framework 5,因此更喜欢利用我已经使用的技术的解决方案。

1 个答案:

答案 0 :(得分:0)

我决定使用“仅插入”表。遗憾的是,使用EF5并不容易。