【问题标题】:How do you clone and compare tables in NHibernate?您如何在 NHibernate 中克隆和比较表?
【发布时间】:2010-07-17 15:38:48
【问题描述】:

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

您将如何在 NHibernate 中完成此任务? NH 似乎不是为这种类型的数据操作而设计的,我不确定我是在滥用我的数据库、NH 还是两者兼而有之。

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

【问题讨论】:

    标签: nhibernate


    【解决方案1】:

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

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

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

    这可能并不理想,因为它会引入第二组映射,但它是一种到达目的地的方法。看起来你最好做一些更接近数据库引擎的事情,但是如果不知道你对这些快照有什么想法(从应用程序的角度来看),这很难说。

    【讨论】:

      【解决方案2】:

      我最终用快照 id 列扩充了我的实体,并将条目复制到表中的适当位置。结合过滤器,我可以从任何给定的快照中进行选择。不得不对遗留代码做一些补丁,但它基本上可以工作。

      【讨论】:

        【解决方案3】:

        我们最终创建了重复的表,其中包含用于快照的时间戳类型的额外列。使主表上的索引更小,因为我们有 1000 万 + 行,因此在同一个表中添加版本会创建更多记录。还有不同表空间中的版本表(mssql 上的 db 文件)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-09-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-10-01
          • 1970-01-01
          相关资源
          最近更新 更多