1

データベースには、Sites、Organisations、Person、Department と呼ばれるテーブルがあり、LookupID、Description などと同じ構造を持ち、Question、Answer などのテーブルがいくつかあります。これらのテーブルには、上記と同じ列があり、2 つまたは 3 つの列が追加されています。

Entity Framework Code-First を使用してこれを実装する最良の方法は何ですか。

コード側では、一般的なプロパティを持つ LookUp クラスと、質問などのその他のプロパティを考えていました。

必要なルックアップをロードするように EF に指示する方法が思いつきません (これらはすべてルックアップなどであるため、サイト、組織などのタイプを持つことはできません。

バージョンは問題ありません。これは新しいプロジェクトであるため、利用可能な最新のものを使用できます。

ありがとう、

4

1 に答える 1

2

Table-per-class (TPC) 継承のように思えます。Lookup エンティティを基本抽象クラスとしてモデル化し、Lookup エンティティから他のすべてのエンティティを派生させます。派生クラスは、特定のフィールドのみを宣言します。データベースでは、各派生エンティティは、共有フィールドと派生フィールドの両方を持つ個別のテーブルとして表されます。

データベース ファースト (EDMX)およびコード ファーストのアプローチでこのマッピングを実現することは可能ですが、これらのテーブルをクエリしようとすると、パフォーマンスに影響が生じる可能性があります。一般的なルックアップだけを照会すると、必要な特定のフィールドがどれに含まれているかがわからないため、EF は常にすべての派生テーブルを結合します。これがTPC継承でも発生するかどうかはわかりませんが、特定の型を照会したいことを明示的に伝えたとしても、EFは継承されたすべてのテーブルに参加することがありました-これは他の形式の継承(TPT)では特に問題でしたが、 .NET 4.5 で解決されました。

編集:言及するのを忘れた詳細が1つあります。EF の各エンティティは、そのキーによって一意に識別される必要があります。継承をマップする場合、継承階層内の各エンティティはそのキーによって一意に識別される必要があります。これは、すべてのルックアップ テーブルで一意のキー値を使用する必要があることを意味します。

于 2012-07-03T12:16:47.037 に答える