2011-05-18 77 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

相關問題