LINQ to SQL クラスの作成 : O/R デザイナの使用
更新 : 2007 年 11 月
オブジェクト リレーショナル デザイナ (O/R デザイナ) を使用すると、LINQ to SQL クラスをデータベース内のテーブルにマップできます。このようなマップされたクラスは、エンティティ クラスとも呼ばれます。エンティティ クラスのプロパティはテーブルの列にマップされ、データは Windows フォーム上のコントロールにバインドできます。LINQ to SQL の詳細については、「Visual Basic Express での LINQ の使用」を参照してください。
このレッスンでは、O/R デザイナを使用して、Northwind データベース内のテーブルにマップされたエンティティ クラスを作成する方法を説明します。その後、Windows フォーム アプリケーションでデータを表示します。
前提条件
Visual Basic Express Edition のインストール時に SQL Server Express Edition をインストールしなかった場合は、続行する前にインストールする必要があります。LINQ to SQL では、SQL Server Compact 3.5 データベースはサポートされていません。SQL Server Express Edition の入手方法については、「方法 : サンプル データベースをインストールする」の「SQL Server Express Edition の入手」を参照してください。
このレッスンを行うには、Northwind サンプル データベースの SQL Server バージョンにアクセスできる必要があります。詳細については、「方法 : サンプル データベースをインストールする」を参照してください。
やってみよう
O/R デザイナを開くには
[ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします。
[新しいプロジェクト] ダイアログ ボックスで、[テンプレート] ペインの [Windows フォーム アプリケーション] をクリックし、プロジェクトに「LINQToSQLSample」という名前を設定して、[OK] をクリックします。
新しい Windows フォーム プロジェクトが開きます。
[プロジェクト] メニューの [新しい項目の追加] をクリックします。
[LINQ to SQL クラス] テンプレートをクリックし、[名前] ボックスに「NorthwindSample.dbml」と入力します。
[追加] をクリックします。
プロジェクトに空の LINQ to SQL クラス ファイル (NorthwindSample.dbml) が追加され、O/R デザイナが開きます。
O/R デザイナは、2 つのデザイン サーフェイスで構成されます。左側はエンティティ ペインで、右側はメソッド ペイン領域です。エンティティ ペインは、ファイルで定義されているエンティティ クラスを表示するメインのデザイン サーフェイスです。メソッド ペインは、ストアド プロシージャと関数にマップされる DataContext のメソッドを表示するデザイン サーフェイスです。O/R デザイナを右クリックし、[メソッド ペインの非表示] をクリックすると、メソッド ペインを非表示にできます。このレッスンではメソッド ペインは使用しませんが、その詳細については「DataContext メソッド (O/R デザイナ)」で説明しています。
メインのデザイン サーフェイスをクリックし、[プロパティ] ウィンドウで [Name] プロパティを調べて、名前が NorthwindSampleDataContext になっていることを確認します。データベース エクスプローラから O/R デザイナ サーフェイスにデータベース テーブルをドラッグすることで、エンティティ クラスを作成できます。ただし、まずデータベースへの接続を作成する必要があります。この手順は、「必要な情報の入手 : 既存のデータベースに接続する」で説明されている手順とほぼ同じですが、このレッスンでは SQL Server Express データベースを使用します。
Northwind データベースに接続するには
[表示] メニューの [データベース エクスプローラ] をクリックします。
データベース エクスプローラが開きます。
データベース エクスプローラのツール バーで、[データベースへの接続] をクリックします。
[データ ソースの選択] ウィンドウで、[Microsoft SQL Server データベース ファイル] をクリックし、[続行] をクリックします。
[接続の追加] ダイアログ ボックスが表示されます。
[接続の追加] ダイアログ ボックスで、データ ソースが [Microsoft SQL Server データベース ファイル (SqlClient)] になっていることを確認します。
[参照] をクリックし、Northwind.mdf データベースを探して選択します。[開く] をクリックします。
[接続の確認] をクリックして、接続が成功したことを検証します。
[OK] をクリックして、[接続の追加] ダイアログ ボックスを閉じます。
エンティティ クラスの作成
これで、Northwind データベースのテーブルがデータベース エクスプローラに表示されるようになりました。データベース エクスプローラから O/R デザイナにテーブルをドラッグできます。これにより、データベース エクスプローラからドラッグしたテーブル内の列にマップされるプロパティを持つエンティティ クラスが自動的に作成されます。
エンティティ クラスを作成するには
データベース エクスプローラで、Northwind.mdf を展開し、[テーブル] を展開します。
データベース エクスプローラから O/R デザイナ サーフェイスに Customers をドラッグします。データ ファイルをプロジェクトにコピーするかどうか確認するメッセージが表示されたら、[はい] をクリックします。
Customer という名前のエンティティ クラスが作成されます。これには、Customers テーブルの列に対応するプロパティが含まれています。
データベース エクスプローラから O/R デザイナ サーフェイスに Orders をドラッグします。
Customer エンティティ クラスへの関連付け (リレーションシップ) を持つ Order という名前のエンティティ クラスが作成されます。これには、Orders テーブルの列に対応するプロパティが含まれています。
これでエンティティ クラスを作成できたので、データ ソース構成ウィザードを実行して、エンティティ クラスを [データ ソース] ウィンドウに追加できます。
[データ ソース] ウィンドウでエンティティ クラスをオブジェクト データ ソースとして追加するには
[ビルド] メニューの [LINQToSQLSample のビルド] をクリックします。
[データ] メニューの [データ ソースの表示] をクリックします。
[データ ソース] ウィンドウで、[新しいデータ ソースの追加] をクリックします。
[データ ソースの種類を選択] ページで、[オブジェクト] をクリックし、[次へ] をクリックします。
[LINQToSQLSample] ノードを展開し、Customer クラスを探します。
メモ : Customer クラスが使用可能でない場合は、[キャンセル] をクリックし、プロジェクトをビルドしてからウィザードを再実行します。
[完了] をクリックしてデータ ソースを作成し、Customer エンティティ クラスを [データ ソース] ウィンドウに追加します。
エンティティ クラスへの Windows フォーム上のコントロールのバインド
[データ ソース] ウィンドウから Windows フォームにテーブルまたはフィールドをドラッグすると、エンティティ クラスにデータ バインドされるコントロールをフォームに追加できます。
エンティティ クラスにバインドされるコントロールを追加するには
ソリューション エクスプローラで、Form1 を右クリックし、[デザイナの表示] をクリックします。
[データ ソース] ウィンドウで、Customer を展開します。
CompanyName の横にあるドロップダウン矢印をクリックし、[ラベル] をクリックします。
CompanyName をフォームにドラッグします。
フォームにラベルとナビゲーション ツール バーが追加されます。
[データ ソース] ウィンドウから Form1 に Orders をドラッグします。CompanyName の下に配置します。
ソリューション エクスプローラで、Form1 を右クリックし、[コードの表示] をクリックします。
フォームに次のコードを追加します。これは、Form クラスの先頭で、どのメソッドにも属さない位置に追加します。
Private NorthwindSampleDataContext1 As New _ NorthwindSampleDataContext
Form_Load イベントをダブルクリックして、このフォームのイベント ハンドラを作成します。イベント ハンドラに次のコードを追加します。
CustomerBindingSource.DataSource = _ NorthwindSampleDataContext1.Customers()
F5 キーを押してコードを実行します。
フォームが開いたら、ツール バーの [次に移動] ボタンをクリックして会社間をスクロールし、選択した顧客の注文が表示されるように注文データが更新されることを確認します。
変更の保存
O/R デザイナにコントロールを追加した時点では、ナビゲーション ツール バーの [データの保存] ボタンは有効になっていません。変更を保存できるようにするには、まず保存ボタンを有効にしてから、変更されたデータを保存するコードを追加する必要があります。
保存ボタンを有効にするには
デザイン ビューで、ナビゲーション ツール バーの保存ボタンを選択します (フロッピー ディスクのアイコンのボタン)。
[プロパティ] ウィンドウで、[Enabled] プロパティを [True] に設定します。
保存ボタンをダブルクリックして、イベント ハンドラを作成し、コード エディタに切り替えます。
保存ボタンのイベント ハンドラに次のコードを追加します。
NorthwindSampleDataContext1.SubmitChanges()
F5 キーを押してコードを実行します。
いずれかの Shipped Date フィールドの値を変更し、Tab キーを押して変更をコミットします。
[データの保存] をクリックします。
フォームを閉じます
F5 キーを押し、変更が保存されたことを確認します。
次の手順
このレッスンでは、O/R デザイナを使用して LINQ to SQL クラスを作成する方法について説明しました。次のレッスンでは、LINQ クエリを使用してデータをバインドする方法について説明します。アプリケーションで LINQ を使用する方法の詳細については、「Visual Basic Express での LINQ の使用」を参照してください。
次のレッスン : 「コントロールにデータをバインドするための LINQ の使用」
参照
処理手順
チュートリアル : LINQ to SQL クラスの作成 (O/R デザイナ)
概念
Visual Basic Express での LINQ の使用