Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何保存实体';改变历史_C#_Database_Entity Framework_Database Design_Entity Framework 5 - Fatal编程技术网

C# 如何保存实体';改变历史

C# 如何保存实体';改变历史,c#,database,entity-framework,database-design,entity-framework-5,C#,Database,Entity Framework,Database Design,Entity Framework 5,我有一个任务实体,具有各种导航属性,包括注释实体: 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

我有一个
任务
实体,具有各种导航属性,包括
注释
实体:

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 description{get;set;}
    ,以及类似的
    Title
    User
    EditDate
    等。它很快就会失控

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

  • 两者都有,拥有当前的一组属性和另一组空值,如
    TitleHistory
    DescriptionHistory
    ,等等,它们是旧版本的CSV字符串,因此只有在处理历史内容时才会变得复杂
此外,用户的存储也存在问题,除非我使用CSV的ID而不是实体

解决这个问题的最佳方法是什么?有多种技术,如存储过程和-但我使用的是Entity Framework 5,因此我更喜欢利用我已经使用的技术的解决方案。

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