随着时间的推移改变跟踪EF?

时间:2011-06-04 17:02:35

标签: entity-framework

如果我使用EF,我想知道跟踪和/或持续更改的最佳做法是什么。我想开始使用EF来开发一个新项目。我需要的是一种改变历史。

我之前就是这样做的:如果创建了一条记录,它会被保存为ID并且ID与InvariantID相同。如果记录已更新,我将其标记为已删除,并使用新值和新ID创建新记录,但具有相同的InvariantID。像这样我总是有我现在的记录,但也有变化的历史。

这适用于我的场景。历史记录的数量不是问题,因为我通常只对那些不经常变化的数据使用它。

这种构建在EF中是以某种方式构建,还是EF的最佳方式是什么?

1 个答案:

答案 0 :(得分:1)

不,它不是构建到EF中,它不会以这种方式工作。我甚至认为它不是数据库级别的好方法,因为它使参照完整性非常复杂。

使用EF时,仅当您使用以下方法时才会起作用:

  • 您将为您的实体使用条件映射 - 条件为IsDeleted = 0。它将确保在查询中仅使用未删除的实体。
  • 您将为删除操作映射存储过程以正确设置IsDeleted = 1而不是真正删除记录
  • 您必须手动调用DeleteObject删除您的记录,之后您将插入新记录 - 原因是EF无法处理实体在更新期间更改其PK值的情况。
  • 除非您使用其他存储过程手动重建参照完整性,否则您的实体将无法参与关系
  • 您需要存储过程来查询历史(已删除)记录