У меня есть 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 идентификаторов, а не сущности.
Каков наилучший подход к этой проблеме? Существуют различные методы, такие как sprocs и "insert only" tables, но я использую Entity Framework 5 и поэтому предпочитаю решение, которое использует технологию, которую я уже использую.