次の方法で共有


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

更新 : November 2007

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

Bb399352.alert_note(ja-jp,VS.90).gifメモ :

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

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

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

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

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

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

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

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

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

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

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

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

使用例

Bb399352.alert_note(ja-jp,VS.90).gifメモ :

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)