ORM或数据库,其作用类似于版本控制并跟踪历史记录

时间:2014-10-12 11:09:23

标签: database entity-framework orm

这只是我想知道的一个随意的想法。是否存在原生支持跟踪历史记录的ORM或数据库?我想象的是每一行都有一个带有Id和版本的复合主键。更新将"追加"具有相同Id和下一个可用版本号的新行。普通选择仅返回唯一标识的行的最新版本,但是" SelectHistory"会返回所有行。删除本身就是一个软删除。

鉴于这不是一个新问题,并且在阳光下没有什么新东西,它让我觉得很有可能某人已经设计了一个优雅的解决方案来抽象出这部分的难点。离开,并且它可以在数据库层或ORM层完成。

我有一个基于Entity Framework的现有应用程序。它会覆盖DbContext的SaveChanges方法,以便为每个新的/更改的实体设置CreatedBy / CreatedDate / ModifiedBy / ModifiedDate属性。客户最近询问了添加完整历史记录跟踪需要做多少工作。根据过去类似系统的经验,我给了他们一个合理的估计。我的估计涉及向模型和业务层逻辑添加其他实体以填充这些实体。客户决定不去做这项工作,但它让我想知道是否有更好的方法。实体框架是否有更好的解决方案?与其他架构有更好的解决方案吗?

1 个答案:

答案 0 :(得分:1)

您所描述的是multi-version concurrency control的一种形式。通常,MVCC在数据库实现的掩盖下使用,以避免在只读事务期间锁定,但也可以按照您的建议进行显式处理。讨论了在this question中实现显式MVCC的一些不同选项。如果您还要为每个版本跟踪CreatedDate,那么您拥有temporal database所需的一切。