2011-05-18 18 views
0

私は、これは計画されていませんでしたが、Entity Frameworkを使用すると、 A & B)同一のデータ構造を持つが名前は異なる。もちろん、これはEFを介して異なる種類のオブジェクトのペアとしてマッピングされます。同じ構造、異なる名前、実行時に使用されるハウツースイッチを持つ2つのテーブル

私がしたいのは、テーブル/オブジェクトが1つしかなく、AグループではなくテーブルのBグループからデータを取得するために投げ捨てることができる。

これを有効にするには、repoを使用する便利なルートがあるかどうか、構造マップと多型を使用しているかどうかわかりません。

代わりに、双子の 'B'テーブルを2番目のデータベースに入れ、 'A'双子と同じ名前を付けて、それがまったく役立つのであれば?

(今まで私はクロスオーバーのない2つの異なるデータベースを持っていて、接続文字列スイッチを実装する必要があると思っていましたが、80%のテーブルが2つの状態とその3つまたは4つは双子である)

+1

3つのデータベースと対応する接続​​文字列。最初の2つのデータベースは「ツイン」テーブルを持ち、3つ目は「共有」テーブルを持っています。 –

+0

双子のテーブルと共有テーブルの間にFKがありますので、それは壊れると思います。 – Andiih

+0

それは間違いなく壊れます。 (私は答えとしてそれを入れなかったので、長いショットを取った。) –

答えて

0

2つのデータベースの作成、1番目のEFオブジェクトの生成、2番目の共通テーブルの削除、同じ名前の1番目のビューへの置き換えなどでうまくいきます。これにより、リポジトリ内の正しい接続文字列を簡単に取り出すことができます(ただし、構造マップを使ったリポジトリの交換はおそらく面倒です)。

1

私はこれを依存性注入と多型の組み合わせによって実装します。

よりもむしろ実体上で直接操作する(のがTwinAとTWINBそれらを呼びましょう)、私は次の種類を作成します...

(問題の多くの文脈情報...名前を容赦ない)

必要に応じて、次に
TwinModel (a projected type of the actual entities..hence view model) 

、あなたが持っているでしょう...

ITwinRepository 
TwinReposotoryImplA 
TwinRepositoryImplB 

、正しいリポジトリが結合コンフィグて(構造マップを使用して、実行時にバインドされるだろう)。実装上の違いは、あるエンティティセットを別のエンティティセット(TwinAまたはTwinB)よりも活用することです。

符号化の観点からは、ITwinRepositoryとTwinModelでコーディングしているので、将来の変更に影響を受ける必要はありません。 :

+0

です(テーブルにはOrderやClass、Divなどの名前がありますので混乱はありません!私はRepoに対してコード化しましたが、TwinModelのアプローチを使用していませんでした:すごくたくさんの再コード化が必要です! – Andiih

関連する問題