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

如何克隆和比较NHibernate中的表?,nhibernate,Nhibernate,我有一个应用程序,我想对所有实体进行快照,创建表示特定时间点的克隆表。然后,我希望能够比较这些快照之间的差异,以了解数据是如何随时间演变的 您将如何在NHibernate中实现这一点?NH似乎不是为这种类型的数据操作而设计的,我不确定我是在滥用我的数据库NH,还是两者兼而有之 (注意,由于数据库引擎限制,我无法使用视图或存储的过程。)是否确实需要在此快照中保存每个实体的全部内容?如果是这样的话,也许一组名为_snapshot的表会有所帮助。您可以将实体保存到此表中(仅插入,从不更新)。您可以存储

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

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


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

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

id | snapshot_date | item_id | item_prop1 | item_prop2 ...
123 | 7/16/10 | 15 | "item desc" | "item name" ...
在您的域中,可能可以使用快照实例(包含id和快照日期的快照,以及T的实例)


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

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

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