在我的数据库中我有两个视图具有完全相同的列(每个视图通过链接服务器引用来自不同远程数据库的数据)。
因为两个视图具有相同的列,逻辑上代表相同的数据。
在某些情况下,我既需要存储在不同视图中的数据的并集,也需要来自每个视图的单个数据。
在这种情况下使用的最佳映射是什么?有一个特定的地图可以帮助我在一个具有鉴别值的实体中连接两个视图吗?
这里有一个例子:
VIEW1
Col1 | COL2
X1 | Y1
X2 | Y2
视图2
Col1 | COL2
K1 | Z1
K2 | Z2
情况1 - 数据联盟
VIEW1 U VIEW2 =(X1,X2,K1,K2)(Y1,Y2,Z1,Z2)
情况2 - 每个视图中的单个数据
VIEW1 =(X1,x2)(Y1,Y2)
VIEW2 =(K1,K2)(Z1,Z2)
答案 0 :(得分:1)
我会选择第三个视图定义为两个视图的并集(看起来像你的情况1),添加第三列Discrim
作为鉴别器值。让我们说1
View1
的值,2
View2
的值。
然后我会选择每个班级的表格'继承映射状态(http://nhibernate.info/doc/nh/en/index.html#persistent-classes-inheritance部分8.1.1) ,使用鉴别器值将每个子类映射到每个视图行集。
这样,您可以通过超类查询整个对象集,或者通过查询相应的子类来查询其中一个视图。
如果您的视图共享相同的ID,如果提供的ID为int且0未共享,则解决方法可能是在第三个视图中将来自View1的ID转换为负数,并为来自View2的ID保留正数。如果您计划存储ID,或者给定id,则不应忘记在代码中使用的约定,以另一种方式访问数据。