方法 : O/R デザイナを使用して継承を構成する
更新 : November 2007
オブジェクト リレーショナル デザイナ (O/R デザイナ) では、多くのリレーショナル システムに実装されている単一テーブル継承の概念がサポートされています。単一テーブル継承には、親情報と子情報の両方のフィールドを含む単一のデータベース テーブルがあります。リレーショナル データでは、判別用の列に、レコードが属するクラスを決定する値が含まれています。
たとえば、会社に採用されたすべての人を含む 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 デザイナにドラッグし、名前を変更します。これは、派生クラス、つまりサブクラスです。
ツールボックスの [オブジェクト リレーショナル デザイナ] タブで [継承] をクリックし、サブクラス (名前変更したテーブル) をクリックして、基本クラスに接続します。
メモ : ツールボックスの [継承] 項目をクリックしてマウス ボタンを離し、手順 3. で作成したクラスの 2 番目のコピーをクリックしてから、手順 2. で作成した最初のクラスをクリックします。継承線の矢印は最初のクラスを指します。
各クラスで、関連付けに使用されていない、表示する必要のないオブジェクト プロパティを削除します。関連付けに使用されているオブジェクト プロパティを削除しようとすると、"プロパティ <property name> は関連付け <association name> に関与しているため、削除できません" というエラーが表示されます。
メモ : 派生クラスは基本クラスで定義されているプロパティを継承するため、各クラスに同じ列を定義することはできません (列はプロパティとして実装されます)。基本クラスのプロパティに [Inheritance Modifier] を設定することで、派生クラスでの列の作成が可能になります。詳細については、「プロパティとメソッドのオーバーライド」を参照してください。
O/R デザイナで継承線を選択します。
[プロパティ] ウィンドウで、[Discriminator Property] を、クラス内のレコードを区別するために使用する列の名前に設定します。
[派生クラスの識別子の値] プロパティを、レコードが継承された型であることを示すデータベース内の値に設定します (これは判別用の列に格納される値で、継承されたクラスを示すために使用されます)。
[基本クラスの識別子の値] プロパティを、レコードが基本型であることを示す値に設定します (これは判別用の列に格納される値で、基本クラスを示すために使用されます)。
オプションとして、[Inheritance Default] プロパティを設定することもできます。これは、定義済みの継承コードと一致しない行を読み込むときに使用される継承階層の型を示します。つまり、あるレコードの判別用の列に、[派生クラスの識別子の値] プロパティにも [基本クラスの識別子の値] プロパティにも一致しない値が含まれている場合、そのレコードは [継承の既定値] として指定された型に読み込まれます。
参照
処理手順
チュートリアル : LINQ to SQL クラスの作成 (O/R デザイナ)
チュートリアル : 単一テーブル継承を使用した LINQ to SQL クラスの作成 (O/R デザイナ)