代码之家  ›  专栏  ›  技术社区  ›  Promit

如何克隆和比较NHibernate中的表?

  •  0
  • Promit  · 技术社区  · 14 年前

    我有一个应用程序,我想在其中获取所有实体的快照,创建代表特定时间点的克隆表。然后,我希望能够比较这些快照之间的差异,以了解数据随时间的变化情况。

    你如何在NHibernate中实现这一点?似乎NH不是为这种类型的数据操作而设计的,我不确定我是在滥用我的数据库,NH,还是两者兼而有之。

    (P.S.由于数据库引擎限制,我无法使用视图或存储过程。)

    3 回复  |  直到 14 年前
        1
  •  1
  •   AlexCuse    14 年前

    是否确实需要保存此快照中每个实体的全部内容?如果是这样的话,一组名为type_snapshot的表可能会有所帮助。您可以将实体保存到此表中(仅插入,从不更新)。您可以存储原始项的标识符,并为快照本身生成一个新的标识符。您可以在每个快照中保存时间戳。您的项目快照表如下所示:

    id | snapshot_date | item_id | item_prop1 | item_prop2 ...
    123 | 7/16/10 | 15 | "item desc" | "item name" ...
    

    在您的域中,也许您可以使用快照实例(包含ID和快照日期的快照,以及T的实例)

    它可能并不理想,因为它将引入第二组映射,但它是一种到达目标位置的方法。似乎您最好在数据库引擎附近做些事情,但如果不知道这些快照的想法(从应用程序的角度),就很难说了。

        2
  •  0
  •   Promit    14 年前

    最后,我使用快照ID列来扩充我的实体,并将条目复制到表中的相应位置。结合一个过滤器,我可以从任何给定的快照中进行选择。必须对遗留代码进行一些修补,但基本上可以工作。

        3
  •  0
  •   DerpDerp    14 年前

    最后,我们创建了一个重复的表,并为快照添加了一个timestamp类型的额外列。使主表上的索引变小,因为我们有1000多万行,所以在同一个表中添加版本将创建更多记录。同时在不同的表空间(mssql上的db文件)中版本表