两个表具有相同的结构,不同的名称,如何切换在运行时使用

时间:2011-05-18 18:04:29

标签: c# entity-framework entity-framework-4 structuremap

我没有计划这个,因为要求刚刚出现但是使用实体框架我们有成对的表(我称之为Twins,A& B)具有相同的数据结构但名称不同。这当然通过EF映射为不同类型的对象。

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

我无法弄清楚是否有一个使用repo的有用路径,使用structuremap和/或多态来使其工作。

Al替代方案可能是将两个'B'表放在第二个数据库中,并且与它们的'A'双胞胎同名,如果这样做会有帮助吗?

(直到今天,我认为我有两个不同的数据库,没有交叉,只需要实现一个连接字符串切换 - 事实并非如此,因为80%的表在两个状态之间共享,而它只是3或4个是双胞胎的)

2 个答案:

答案 0 :(得分:1)

我会通过依赖注入和多态的组合来实现它。

我不是直接在实体上操作(我们称之为TwinA和TwinB),而是创建以下类型......

(原谅名称......问题中的背景信息不多)

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

然后,你会......

ITwinRepository
TwinReposotoryImplA
TwinRepositoryImplB

根据需要,使用结构图(通过绑定配置)在运行时绑定正确的存储库。实现差异将是利用一个实体集而不是另一个(TwinA或TwinB)。

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

答案 1 :(得分:0)

我发现创建两个数据库,从第一个生成EF对象,然后在第二个中删除公共表并将它们替换为具有相同名称的第一个视图就可以了。这样我就可以非常简单地在存储库中选择正确的连接字符串(尽管使用structuremap交换repo可能更整洁)。