Share via


方法: 継承階層を割り当てる

LINQ で継承の割り当てを実装するには、以下の手順で示すように、継承階層のルート クラスで属性および属性プロパティを指定する必要があります。 Visual Studio を使用している開発者は、オブジェクト リレーショナル デザイナーを使用して継承改装をマップできます。 「方法:O/R デザイナーを使用して継承を構成する」を参照してください。

Note

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

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

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

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

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

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

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

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

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

    このプロパティでは、データベース テーブルから取得された識別値が、継承マッピングのどの Code 値とも一致しないときの、"フォールバック" マッピングが指定されます。

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

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

注意

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

次のコード例では、Vehicle がルート クラスとして定義され、LINQ の階層を記述するためにここまでの手順が実装されています。

[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;
}
<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

関連項目