O/R デザイナーを使用して継承を構成する
オブジェクト リレーショナル デザイナー (O/R Designer)では、リレーショナル システムに実装されている場合が多いため、単一テーブル継承の概念がサポートされています。 単一テーブル継承には、親情報と子情報の両方のフィールドを含む単一のデータベース テーブルがあります。 リレーショナル データでは、判別用の列に、レコードが属するクラスを決定する値が含まれています。
たとえば、会社に雇用されているすべての人を含む Persons
テーブルについて考えてみます。 従業員の人もいれば、管理者の人もいます。 Persons
テーブルには、管理者を表す値 1 と従業員を表す値 2 を含む EmployeeType
という名前の列が含まれています。これが識別子列です。 このシナリオでは、従業員のサブクラスを作成して、そのクラスには EmployeeType
の値が 2 のレコードだけを入れます。 適用されない列を各クラスから削除することもできます。
継承を使用する (およびリレーショナル データに対応する) オブジェクト モデルの作成は、わかりにくい場合があります。 次の手順では、O/R デザイナーで継承を設定するために必要な手順を概説します。 既存のテーブルと列を参照せずに汎用的な手順に従うのは難しい場合があるので、データを使用したチュートリアルが用意されています。 詳細な手順を使用して継承を構成するため、 O/R デザイナーを参照してくださいチュートリアル: LINQ to SQL を作成するクラスの単一テーブル継承 (O/R デザイナー) を使用してします。
継承されたデータ クラスを作成するには
既存の Visual Basic プロジェクトまたは C# プロジェクトに LINQ to SQL クラス項目を追加して、O/R デザイナーを開きます。
基本クラスとして使用するテーブルを O/R デザイナーにドラッグします。
テーブルの 2 つ目のコピーを O/R デザイナーにドラッグし、名前を変更します。 これは、派生クラス、つまりサブクラスです。
ツールボックスの [オブジェクト リレーショナル デザイナー] タブで [継承] をクリックし、サブクラス (名前を変更したテーブル) を選択して、基本クラスに接続します。
Note
ツールボックスの [継承] 項目をクリックしてマウス ボタンを放し、手順 3 で作成したクラスの 2 番目のコピーをクリックしてから、手順 2 で作成した最初のクラスを選択します。 継承線の矢印は最初のクラスを指しています。
各クラスで、関連付けに使用されていない、表示する必要のないオブジェクト プロパティを削除します。 関連付けに使用されるオブジェクト プロパティを削除しようとすると、エラーが発生します:
The property <property name> cannot be deleted because it is participating in the association <association name>
。Note
派生クラスは基本クラスで定義されているプロパティを継承するため、各クラスに同じ列を定義することはできません (列はプロパティとして実装されます)。基本クラスのプロパティに継承修飾子を設定することで、派生クラスでの列の作成を可能にすることができます。 詳細については、「継承の基本 (Visual Basic)」をご覧ください。
O/R デザイナーで継承線を選択します。
[プロパティ] ウィンドウで、[識別子プロパティ] を、クラスのレコードを区別するための列の名前に設定します。
[派生クラスの識別子の値] プロパティに、レコードが継承された型であることを示すデータベース内の値を設定します。 (これは識別子列に格納される値であり、継承されたクラスを示すために使用されます。)
[基本クラスの識別子の値] プロパティに、レコードが基本型であることを示す値を設定します。 (これは識別子列に格納される値であり、基本クラスを示すために使用されます。)
オプションとして、[継承の既定値] プロパティを設定することもできます。これは、定義済みの継承コードと一致しない行を読み込むときに使用される継承階層の型を示します。 つまり、あるレコードの識別子列に、[派生クラスの識別子の値] プロパティと [基本クラスの識別子の値] プロパティのどちらの値とも一致しない値が含まれている場合、そのレコードは [継承の既定値] として指定された型に読み込まれます。