次の方法で共有


方法 : 継承階層を割り当てる (LINQ to SQL)

LINQ で継承の割り当てを実装するには、以下の手順で示すように、継承階層のルート クラスで属性および属性プロパティを指定する必要があります。 Visual Studio を使用している開発者は、オブジェクト リレーショナル デザイナーを使用して継承階層を割り当てることができます。

メモメモ

サブクラスには特別な属性やプロパティは必要ありません。特に、サブクラスに TableAttribute 属性がない点に注意してください。

継承階層を割り当てるには

  1. ルート クラスに TableAttribute 属性を追加します。

  2. ルート クラスに対し、階層構造の各クラスについて InheritanceMappingAttribute 属性を追加します。

  3. InheritanceMappingAttribute 属性に対し、Code プロパティを定義します。

    このプロパティは、データベース テーブルの IsDiscriminator 列に含まれる値を保持し、このデータ行が属するクラスまたはサブクラスを示します。

  4. InheritanceMappingAttribute 属性に対し、Type プロパティも追加します。

    このプロパティは、キー値が示すクラスまたはサブクラスを表す値を保持します。

  5. 1 つの InheritanceMappingAttribute 属性にのみ、IsDefault プロパティを追加します。

    このプロパティは、データベース テーブルから取得された識別値が、継承の割り当てのいずれの Code 値にも一致しない場合に使用する、フォールバック用の割り当てを示します。

  6. ColumnAttribute 属性に IsDiscriminator プロパティを追加します。

    このプロパティは、Code 値を保持する列であることを示します。

使用例

メモメモ

Visual Studio を使用している場合は、オブジェクト リレーショナル デザイナーを使用して継承を構成できます。

次のコード例では、Vehicle をルート クラスとして定義し、ここまでの手順を実装して、LINQ の階層構造を指定します。 このリレーションシップを次の図に示します。

継承ダイアグラム

<Table()> _
<InheritanceMapping(Code:="C", Type:=GetType(Car))> _
<InheritanceMapping(Code:="T", Type:=GetType(Truck))> _
<InheritanceMapping(Code:="V", Type:=GetType(Vehicle), _
    IsDefault:=True)> _
Public Class Vehicle
    <Column(IsDiscriminator:=True)> _
        Private DiscKey As String
    <Column(IsPrimaryKey:=True)> _
        Private VIN As String
    <Column()> _
        Private MfgPlant As String
End Class

Public Class Car
    Inherits Vehicle
    <Column()> _
        Private TrimCode As Integer
    <Column()> _
        Private ModelName As String
End Class

Public Class Truck
    Inherits Vehicle
    <Column()> _
        Private Tonnage As Integer
    <Column()> _
        Private Axles As Integer
End Class
[Table]
[InheritanceMapping(Code = "C", Type = typeof(Car))]
[InheritanceMapping(Code = "T", Type = typeof(Truck))]
[InheritanceMapping(Code = "V", Type = typeof(Vehicle),
    IsDefault = true)]
public class Vehicle
{
    [Column(IsDiscriminator = true)]
    public string DiscKey;
    [Column(IsPrimaryKey = true)]
    public string VIN;
    [Column]
    public string MfgPlant;
}
public class Car : Vehicle
{
    [Column]
    public int TrimCode;
    [Column]
    public string ModelName;
}

public class Truck : Vehicle
{
    [Column]
    public int Tonnage;
    [Column]
    public int Axles;
}

参照

概念

継承のサポート (LINQ to SQL)

その他の技術情報

方法 : コード エディターを使用してエンティティ クラスをカスタマイズする (LINQ to SQL)