O/R デザイナでの LINQ to SQL クラスの作成
更新 : 2007 年 11 月
オブジェクト リレーショナル デザイナ (O/R デザイナ) を使用すると、LINQ to SQL クラスをデータベース内のテーブルに割り当てることができます。割り当てられたクラスは、エンティティ クラスとも呼ばれます。エンティティ クラスのプロパティをテーブルの列に割り当て、データを Windows フォーム上のコントロールにバインドできます。LINQ to SQL の詳細については、「C# での LINQ の使用」を参照してください。
前提条件
Visual C# Express Edition のインストール時に SQL Server Express Edition をインストールしなかった場合は、レッスンを続行する前にインストールしてください。SQL Server Compact 3.5 データベースは、現在 LINQ to SQL ではサポートされていません。SQL Server Express Edition の入手方法については、「方法 : サンプル データベースをインストールする」の「SQL Server Express Edition の入手」を参照してください。
SQL Server バージョンの Northwind サンプル データベースへのアクセスも必要です。このデータベースの入手とインストールの方法については、「方法 : サンプル データベースをインストールする」を参照してください。
O/R デザイナを開く
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 デザイナ)」で説明します。
メイン デザイン サーフェイスをクリックし、[プロパティ] ウィンドウで名前が NorthwindSampleDataContext であることを確認します。データベース エクスプローラから O/R デザイナ サーフェイスまでデータベース テーブルをドラッグすることで、エンティティ クラスを作成できます。ただし、まずデータベースへの接続を作成する必要があります。この処理は、「方法 : データベースに接続する (C#)」で説明した処理に似ていますが、ここでは SQL Server Express データベースを使用する点が異なります。
Northwind サンプル データベースに接続するには
[表示] メニューの [その他のウィンドウ] をポイントし、[データベース エクスプローラ] をクリックします。
データベース エクスプローラが開きます。
[データベースへの接続] をクリックします。
[接続の追加] ダイアログ ボックスが表示されます。
[接続の追加] ダイアログ ボックスで、[データ ソース] が [Microsoft SQL Server データベース ファイル] であることを確認します。
[参照] をクリックし、[Northwind.mdf] データベースを選択します。
[接続の確認] をクリックして、正常に接続されたことを確認します。
[OK] をクリックして、[接続の追加] ダイアログ ボックスを閉じます。
エンティティ クラスの作成
これで、Northwind データベースのテーブルがデータベース エクスプローラに表示されます。データベース エクスプローラから O/R デザイナにテーブルをドラッグできます。これにより、選択したテーブル内の列に割り当てられるプロパティを持つエンティティ クラスが自動的に作成されます。
エンティティ クラスを作成するには
データベース エクスプローラで、[Northwind.mdf] を展開し、[テーブル] を展開します。
データベース エクスプローラから O/R デザイナ サーフェイスに [Customers] をドラッグします。データ ファイルをプロジェクトにコピーするかどうか確認するメッセージが表示されたら、[はい] をクリックします。
Customer という名前のエンティティ クラスが作成されます。これには、Customers テーブルの列に対応するプロパティがあります。
メモ : エンティティ クラス名は Customers ではなく Customer です。このような名前の変更動作を複数形化と呼びます。これは、[オプション] ダイアログ ボックスでオンまたはオフにできます。詳細については、「[オプション] ダイアログ ボックス (Visual Studio)」および「方法 : 複数形化をオンおよびオフにする (O/R デザイナ)」を参照してください。
データベース エクスプローラから O/R デザイナ サーフェイスに [Orders] をドラッグします。
Order という名前のエンティティ クラスが作成されます。Order クラスと Customer エンティティ クラスの間には関係 (関連付けと呼ばれます) があります。Order クラスのプロパティは、Orders テーブルの列に対応します。
エンティティ クラスを作成したので、データ ソース構成ウィザードを実行することで、エンティティ クラスを [データ ソース] ウィンドウに追加できます。
[データ ソース] ウィンドウでエンティティ クラスをオブジェクト データ ソースとして追加するには
[ビルド] メニューの [ソリューションのビルド] をクリックします。
[データ] メニューの [データ ソースの表示] をクリックします。
[データ ソース] ウィンドウで、[新しいデータ ソースの追加] をクリックします。
[データ ソースの種類を選択] ページで、[オブジェクト] をクリックし、[次へ] をクリックします。
[LINQToSQLSample] を展開し、Customer クラスをクリックします。
メモ : Customer クラスが使用可能でない場合は、[キャンセル] をクリックし、プロジェクトをビルドしてからウィザードを再実行します。
[完了] をクリックしてデータ ソースを作成し、Customer エンティティ クラスを [データ ソース] ウィンドウに追加します。
エンティティ クラスへの Windows フォーム上のコントロールのバインド
[データ ソース] ウィンドウからフォームにテーブルまたはフィールドをドラッグして、エンティティ クラスにデータ バインドされるコントロールを Windows フォームに追加できます。
エンティティ クラスにバインドされるコントロールを追加するには
ソリューション エクスプローラで、Form1 を右クリックし、[デザイナの表示] をクリックします。
[データ ソース] ウィンドウで、[Customer] を展開します。
CompanyName の横にあるドロップダウン矢印をクリックして、[Label] をクリックします。
[CompanyName] をフォームにドラッグします。
[データ ソース] ウィンドウから Form1 に [Orders] をドラッグします。それを [CompanyName] の下に配置します。
ソリューション エクスプローラで、Form1 を右クリックし、[コードの表示] をクリックします。
Form クラスの先頭で、また特定のメソッドの外部で、フォームに次のコードを追加します。
private NorthwindSampleDataContext northwindSampleDataContext1 = new NorthwindSampleDataContext();
Form_Load イベントのイベント ハンドラを作成し、イベント ハンドラに次のコードを追加します。
customerBindingSource.DataSource = northwindSampleDataContext1.Customers;
F5 キーを押してコードを実行します。
フォームが開いたら、bindingNavigatorMoveNextItem ボタンをクリックして会社間をスクロールし、選択した顧客の注文を表示するように ordersDataGridView が更新されていることを確認します。
変更の保存
O/R デザイナにコントロールを追加するときに、bindingNavigator の [保存] ボタンは有効になっていません。変更を保存できるようにするには、まず [保存] ボタンを有効にしてから、変更されたデータを保存するコードを追加する必要があります。
[保存] ボタンを有効にするには
bindingNavigator の [保存] ボタン (フロッピー ディスクのアイコンのボタン) をクリックします。
[プロパティ] ウィンドウで、Enabled プロパティを True に設定します。
保存ボタンをダブルクリックして、イベント ハンドラを作成し、コード エディタに切り替えます。
[保存] ボタンのイベント ハンドラに次のコードを追加します。
northwindSampleDataContext1.SubmitChanges();
F5 キーを押してコードを実行します。
Shipped Date フィールドの 1 つの値を変更し、Tab キーを押して変更をコミットします。
[データの保存] をクリックします。
フォームを閉じます
F5 キーを押し、変更が保存されたことを確認します。