4

C#エンティティフレームワークを使用して、プロジェクトのSQLサーバーにデータをマップしています。私は、エンティティフレームワークを使用して、サブクラス化されたエンティティにテーブルがなくても、識別子フィールドに基づいてカスタムサブクラスを自動的に生成する方法を見つけようとしています。

例:

エンティティフレームワークにAは、フィールドを持つオブジェクトがありますtype。私も以下を持っています

public class B : A {
}

public class C : A {
}

typeたとえば、フィールドがたとえばであるとエンティティフレームワークに認識させてから、クラスBのインスタンスを作成する方法を探しています。Bクラスには、データベースに永続化する必要のあるデータはありません。これらは、別のテーブルの行の単なるラッパーです。

例:

アイテムオブジェクトのテーブルがあります。各アイテムオブジェクトには、アイテム設定のコレクションとアイテムタイプフィールドがあります。

アイテムにはさまざまな種類(テキスト、ラジオ、チェックボックス)があり、抽象メソッドを使用してすべて異なる方法でレンダリングされますrender()。これらの各サブタイプには、そのオブジェクトに必要な特定のアイテム設定のセットもあります。

データベースにマップせずにエンティティサブクラスを作成できる場合は、TextItemをItemのサブクラスにし、render()メソッドを実装し、アイテム設定テーブルの各値にマップするプロパティを追加します。次に、データベースから新しいアイテムをプルするときに、タイプフィールドに基づいて、ディスクリミネーターに基づいて特定のクラスが自動的に作成されます。

私はDBMLを使用してこの種のことを行いました。より強力なエンティティフレームワークを使用したいのですが、私が探していることを実行する方法がない可能性があります。

4

1 に答える 1

0

これは Table-per-hierarchy マッピングと呼ばれ、EDMXコード ファーストの両方で可能です。実際に機能させるには、サブクラスをマップする必要があります。これは、EF が識別子の値を正しい型に正しく変換するためにサブクラスの存在を認識している必要があるためです。クラス階層全体が単一のデータベース テーブルにマップされます。

于 2012-07-10T18:55:14.933 に答える