2012-05-11 13 views
2

私はクラスを持っています。それはEntityModelと呼ばれ、EntityModelで定義されているように同じ列を持つ3つの異なるテーブルを作成したいとします。テーブルtbPasttbPresenttbFutureを呼び出してみましょう。複数のテーブルの同じモデル

using (var db = new MyContext()) 
{ 
    var element = db.Past.Find(id); 
    db.Past.Remove(element); 
    db.Present.Add(element); 
    db.SaveChanges(); 
} 

3つのテーブルを持つことの主な目的はパフォーマンスです:私はまた、エンティティDbContextでseparetelyそれらにアクセスするテーブルが数百万行を持つことになり、そして最も重要なのは、行の数十で、Presentです。ほとんどのクエリはPresentテーブルで行われます。

これを行うにはどのような方法が最適ですか?同じプロパティを持つ3つのモデルを実装することは、私にとっては正しいとは思えません。

私はあなたがEFコード・ファースト/ wの別々のテーブルを生成するために、同じモデルを使用することはできませんASP.NET MVCと一緒に3

+0

EF worldでは、同じエンティティタイプを異なるテーブルにマップすることはできません。多くの理由から。あなたの目的のために、@ Teoman Soygulの答えを使用します。 –

答えて

1

、コードファーストアプローチで、Entity Frameworkのを使用しています。何らかの種類のグループ化が必要な場合は、Discriminatorフィールドを使用し、値のいずれかを使用して:PastPresentFutureとします。

編集:

同様の効果がtable-per-concrete type継承によって達成することができます。したがって、各タイプはそれ自身のテーブルを持ち、ほとんどのフィールドを共有することができます。

+0

'Discriminator'は通常の' string'プロパティですか?テーブルを分離する目的は、ほとんどのクエリが 'Present'テーブルにあることです(何百万行あり、最も重要なものは' Present'で約十行あります)。 「ディスクリミネータ」を使用するとパフォーマンス上の問題はありますか? –

+0

'string'はあなたに合った' int'です。パフォーマンスが心配な方は編集をご覧ください。 –

+0

私はDiscriminatorを実装し、パフォーマンスを測定します - それが許容できない場合、私はTPCの継承を試みます。ちなみに素晴らしいリンクです! –

関連する問題