1

以下のように、基本クラス Component と 2 つの派生クラス ComponentA および ComponentB があるとします。

public class Component
{
   public int ComponentID {get; set;}
   public int ComponentType {get; set;}
   // some other statements ...
}

その後

public class ComponentA : Component
{
   // some statements ...
}

public class ComponentB : Component
{
   // some statements ...
}

ここで、Component クラスの COmponentType の値に基づいて、ComponentA または ComponentB に切り替えて、それらの関連データを取得する方法を説明します。

これは edmx でこれを行う方法の例の 1 つですが、EF の Code First アプローチで同じことを行う方法があることを知りたいです。http://www.c-sharpcorner.com/UploadFile/ff2f08/entity-framework-4-0-tph-part-2/

4

2 に答える 2

0

ここで最初にコードを含むTPH(階層ごとのテーブル)を見つけることができます

于 2012-04-04T08:02:39.313 に答える
0

プロパティを削除すると、EF は、サブクラスを区別するために使用される列を含むテーブルをComponentType自動的に作成します。ComponentDiscriminator

識別子列に特定の列名および/またはデータ型が必要な場合は、直接、または実行することで、OnModelCreatingイベントのデフォルトをオーバーライドできます。DbContextEntityTypeConfiguration

Map(m => m.Requires("ComponentType").HasValue(1);

サブタイプごとに。(HasValue明らかに、毎回異なる値で)。

コンテキストでプロパティを作成しDbSet<Component>ます。これは、タイプに関係なく、すべてのコンポーネントを返します。やりたいだけComponentAなら

context.Components.OfType<ComponentA>(). ...

ああ、Component抽象クラスにする必要があります。

于 2012-04-05T19:56:23.940 に答える