2011-05-18 78 views
0

我不打算这样做,因为需求刚刚出现,但使用实体框架我们有一对表(我将称它们为双胞胎, A)& B)具有相同的数据结构但名称不同。这当然通过EF作为不同类型的对象映射。两个表具有相同的结构,不同的名称,如何在运行时切换

我想要做的是假装我只有一个表/对象,并在某处(可能在存储库中)有一个开关,我可以从B组表中获取数据,而不是从A组。

我无法弄清楚是否有一个有用的路线使用回购,使用结构图和/或多态性,使其工作。

替代方案可能是将双“B”表放在第二个数据库中,并且与他们的'A'双胞胎同名,如果这样做会有所帮助的话? (直到今天,我还以为我有两个不同的数据库,没有交叉,只需要实现一个连接字符串开关 - 事实证明,情况并非如此,因为80%的表格在这两个状态之间共享,而它只是3或4是孪生)

+1

三个数据库和相应的连接字符串。前两个数据库具有“双”表,第三个数据库具有“共享”表。 – 2011-05-18 18:16:36

+0

FK之间的双胞胎表和共享的,所以我认为这将打破。 – Andiih 2011-05-18 18:22:18

+0

这肯定会中断。 (因此,我没有把它作为答案) – 2011-05-18 18:24:04

回答

0

我发现创建两个数据库,从第一个生成EF对象,然后在第二个删除公用表并将其替换为第一个具有相同名称的视图工作得很好。然后,我可以很简单地在存储库中选择正确的连接字符串(尽管用结构映射交换repo可能会更简洁)。

1

我会通过依赖注入和多态性的组合实现这一点。

,而不是直接对实体经营(我们姑且称之为TwinA和双胞胎),我将创建下列类型的...

(原谅名称的问题......没有太多的上下文信息)

TwinModel (a projected type of the actual entities..hence view model) 

然后,你会...

ITwinRepository 
TwinReposotoryImplA 
TwinRepositoryImplB 

根据不同的需要,正确的存放处也将在运行时使用结构图(绑定通过绑定配置uration)。实施差异将是利用一个实体设置另一个实体(TwinA或TwinB)。

从编码的角度来看,您仍然针对ITwinRepository进行编码并在TwinModel上运行,因此如果您决定实施TwinC表,则消费者不需要受到未来更改的影响。 :O

+0

(没有太多的上下文信息,因为这些表有像Order和Class和Div这些名称本身令人困惑!双胞胎很好!)同时问题是,我haden't看到了这个即将到来的,所以我已经编写了一个回购,但没有使用TwinModel的方法:一个可怕的很多重新编码! – Andiih 2011-05-18 20:54:51

相关问题