チュートリアル : 単一テーブル継承を使用した LINQ to SQL クラスの作成 (O/R デザイナ)
更新 : November 2007
オブジェクト リレーショナル デザイナ (O/R デザイナ) では、一般にリレーショナル システムに実装されている単一テーブル継承がサポートされます。このチュートリアルでは、「方法 : O/R デザイナを使用して継承を構成する」のトピックで示した汎用的な手順を拡張し、実際のデータを使用して O/R デザイナでの継承の使用方法を示します。
このチュートリアルでは次のタスクを行います。
データベース テーブルを作成し、データを追加します。
Windows フォーム アプリケーションを作成します。
LINQ to SQL ファイルをプロジェクトに追加します。
新しいエンティティ クラスを作成します。
継承を使用するようにエンティティ クラスを構成します。
継承されたクラスをクエリします。
Windows フォームにデータを表示します。
継承するテーブルの作成
継承の動作を確認するには、小さな Person テーブルを作成し、それをベース クラスとして使用して、そのテーブルから継承する Employee オブジェクトを作成します。
ベース テーブルを作成して継承の動作を確認するには
サーバー エクスプローラまたはデータベース エクスプローラで、[テーブル] ノードを右クリックし、[新しいテーブルの追加] をクリックします。
メモ : Northwind データベースを使用することも、テーブルを追加できる他の任意のデータベースを使用することもできます。
テーブル デザイナで、次の列をテーブルに追加します。
列名
データ型
Null を許容
ID
int
False
Type
int
True
FirstName
nvarchar(200)
False
LastName
nvarchar(200)
False
Manager
int
True
ID 列を主キーとして設定します。
テーブルを Person という名前で保存します。
テーブルへのデータの追加
継承が正しく構成されていることを確認できるように、単一テーブル継承のテーブルの各クラスにデータを入力する必要があります。
テーブルにデータを追加するには
データ ビューでテーブルを開きます (サーバー エクスプローラまたはデータベース エクスプローラで Person テーブルを右クリックし、[テーブル データの表示] をクリックします)。
テーブルに次のデータをコピーします (コピーしてから、結果ペインで行全体を選択してテーブルに貼り付けることができます)。
ID
Type
FirstName
LastName
Manager
1
1
Anne
Wallace
NULL
2
1
Carlos
Grilo
NULL
3
1
Yael
Peled
NULL
4
2
Gatis
Ozolins
1
5
2
Andreas
Hauser
1
6
2
Tiffany
Phuvasate
1
7
2
Alexey
Orekhov
2
8
2
Michał
Poliszkiewicz
2
9
2
Tai
Yee
2
10
2
Fabricio
Noriega
3
11
2
Mindy
Martin
3
12
2
Ken
Kwok
3
新しいプロジェクトの作成
これでテーブルが作成されたので、新しいプロジェクトを作成して継承の構成を実際に行います。
新しい Windows アプリケーションを作成するには
[ファイル] メニューで新しいプロジェクトを作成します。
プロジェクトに「InheritanceWalkthrough」という名前を付けます。
メモ : O/R デザイナは Visual Basic プロジェクトと C# プロジェクトでサポートされています。新しいプロジェクトはこれらの言語のどちらかで作成してください。
[Windows フォーム アプリケーション] テンプレートをクリックし、[OK] をクリックします。詳細については、「Windows ベースのアプリケーションの作成」を参照してください。
InheritanceWalkthrough プロジェクトが作成されてソリューション エクスプローラに追加されます。
LINQ to SQL クラス ファイルをプロジェクトに追加します。
LINQ to SQL ファイルをプロジェクトに追加するには
[プロジェクト] メニューの [新しい項目の追加] をクリックします。
LINQ to SQL クラス テンプレートをクリックし、[追加] をクリックします。
.dbml ファイルがプロジェクトに追加され、O/R デザイナが開きます。
O/R デザイナを使用した継承の作成
ツールボックスからデザイン サーフェイスに継承オブジェクトをドラッグして、継承を構成します。
継承を作成するには
サーバー エクスプローラまたはデータベース エクスプローラで、以前に作成した Person テーブルに移動します。
O/R デザイナのデザイン サーフェイスに Person テーブルをドラッグします。
O/R デザイナに 2 つ目の Person テーブルをドラッグし、名前を Employee に変更します。
Person オブジェクトから Manager プロパティを削除します。
Employee オブジェクトから、Type、ID、FirstName、および LastName の各プロパティを削除します。つまり、Manager 以外のすべてのプロパティを削除します。
ツールボックスの [オブジェクト リレーショナル デザイナ] タブで、Person オブジェクトと Employee オブジェクトの間に継承を作成します。これを作成するには、ツールボックスの [継承] 項目をクリックします。次に、O/R デザイナで Employee オブジェクトをクリックし、Person オブジェクトをクリックします。継承線の矢印は Person オブジェクトを指します。
デザイン サーフェイスで継承線をクリックします。
"識別子のプロパティ" プロパティを Type に設定します。
Derived Class Discriminator Value プロパティを 2 に設定します。
基本クラスの識別子の値プロパティを 1 に設定します。
Inheritance Default プロパティを Person に設定します。
プロジェクトをビルドします。
継承されたクラスのクエリおよびフォームへのデータの表示
オブジェクト モデル内の特定のクラスを照会するコードをフォームに追加します。
LINQ クエリを作成し、フォームに結果を表示するには
Form1 に ListBox をドラッグします。
フォームをダブルクリックして、Form1_Load イベント ハンドラを作成します。
Form1_Load イベント ハンドラに次のコードを追加します。
Dim dc As New DataClasses1DataContext Dim results = From emp In dc.Persons _ Where TypeOf emp Is Employee _ Select emp For Each Emp As Employee In results ListBox1.Items.Add(Emp.LastName) Next
NorthwindDataContext dc = new DataClasses1DataContext(); var results = from emp in dc.Persons where emp is Employee select emp; foreach(Employee Emp in results) { listBox1.Items.Add(Emp.LastName) }
アプリケーションのテスト
アプリケーションを実行し、リスト ボックスに表示されているレコードがすべて従業員 ([Type] 列の値が 2 のレコード) であることを確認します。
アプリケーションをテストするには
F5 キーを押します。
[Type] 列の値が 2 のレコードのみが表示されていることを確認します。
フォームを閉じます ([デバッグ] メニューの [デバッグの停止] をクリックします)。
参照
処理手順
方法 : プロジェクトに LINQ to SQL クラスを追加する (O/R デザイナ)
チュートリアル : LINQ to SQL クラスの作成 (O/R デザイナ)
方法 : 更新、挿入、および削除を実行するストアド プロシージャを割り当てる (O/R デザイナ)
方法 : Visual Basic または C# でオブジェクト モデルを生成する (LINQ to SQL)