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 デザイナを開くには

  1. [ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします。

  2. [新しいプロジェクト] ダイアログ ボックスで、[Windows フォーム アプリケーション] をクリックし、LINQToSQLSample という名前を付け、[OK] をクリックします。

    新しい Windows フォーム プロジェクトが開きます。

  3. [プロジェクト] メニューの [新しい項目の追加] をクリックします。

  4. [LINQ to SQL クラス] テンプレートをクリックし、[名前] ボックスに「NorthwindSample.dbml」と入力します。

  5. [追加] をクリックします。

    空の LINQ to SQL クラス ファイル (NorthwindSample.dbml) がプロジェクトに追加され、O/R デザイナが開きます。

O/R デザイナは、2 つのデザイン サーフェイスで構成されます。左側のエンティティ ペインと、右側のメソッド ペイン領域です。エンティティ ペインは、ファイルで定義されているエンティティ クラスを表示するメインのデザイン サーフェイスです。メソッド ペインは、ストアド プロシージャと関数にマップされる DataContext のメソッドを表示するデザイン サーフェイスです。O/R デザイナ を右クリックし、[メソッド ペインの非表示] をクリックすると、メソッド ペインを非表示にできます。このレッスンではメソッド ペインは使用しませんが、詳細については「DataContext メソッド (O/R デザイナ)」で説明します。

メイン デザイン サーフェイスをクリックし、[プロパティ] ウィンドウで名前が NorthwindSampleDataContext であることを確認します。データベース エクスプローラから O/R デザイナ サーフェイスまでデータベース テーブルをドラッグすることで、エンティティ クラスを作成できます。ただし、まずデータベースへの接続を作成する必要があります。この処理は、「方法 : データベースに接続する (C#)」で説明した処理に似ていますが、ここでは SQL Server Express データベースを使用する点が異なります。

Northwind サンプル データベースに接続するには

  1. [表示] メニューの [その他のウィンドウ] をポイントし、[データベース エクスプローラ] をクリックします。

    データベース エクスプローラが開きます。

  2. [データベースへの接続] をクリックします。

    [接続の追加] ダイアログ ボックスが表示されます。

  3. [接続の追加] ダイアログ ボックスで、[データ ソース] が [Microsoft SQL Server データベース ファイル] であることを確認します。

  4. [参照] をクリックし、[Northwind.mdf] データベースを選択します。

  5. [接続の確認] をクリックして、正常に接続されたことを確認します。

  6. [OK] をクリックして、[接続の追加] ダイアログ ボックスを閉じます。

エンティティ クラスの作成

これで、Northwind データベースのテーブルがデータベース エクスプローラに表示されます。データベース エクスプローラから O/R デザイナにテーブルをドラッグできます。これにより、選択したテーブル内の列に割り当てられるプロパティを持つエンティティ クラスが自動的に作成されます。

エンティティ クラスを作成するには

  1. データベース エクスプローラで、[Northwind.mdf] を展開し、[テーブル] を展開します。

  2. データベース エクスプローラから O/R デザイナ サーフェイスに [Customers] をドラッグします。データ ファイルをプロジェクトにコピーするかどうか確認するメッセージが表示されたら、[はい] をクリックします。

    Customer という名前のエンティティ クラスが作成されます。これには、Customers テーブルの列に対応するプロパティがあります。

    Bb655880.alert_note(ja-jp,VS.90).gifメモ :

    エンティティ クラス名は Customers ではなく Customer です。このような名前の変更動作を複数形化と呼びます。これは、[オプション] ダイアログ ボックスでオンまたはオフにできます。詳細については、「[オプション] ダイアログ ボックス (Visual Studio)」および「方法 : 複数形化をオンおよびオフにする (O/R デザイナ)」を参照してください。

  3. データベース エクスプローラから O/R デザイナ サーフェイスに [Orders] をドラッグします。

    Order という名前のエンティティ クラスが作成されます。Order クラスと Customer エンティティ クラスの間には関係 (関連付けと呼ばれます) があります。Order クラスのプロパティは、Orders テーブルの列に対応します。

エンティティ クラスを作成したので、データ ソース構成ウィザードを実行することで、エンティティ クラスを [データ ソース] ウィンドウに追加できます。

[データ ソース] ウィンドウでエンティティ クラスをオブジェクト データ ソースとして追加するには

  1. [ビルド] メニューの [ソリューションのビルド] をクリックします。

  2. [データ] メニューの [データ ソースの表示] をクリックします。

  3. [データ ソース] ウィンドウで、[新しいデータ ソースの追加] をクリックします。

  4. [データ ソースの種類を選択] ページで、[オブジェクト] をクリックし、[次へ] をクリックします。

  5. [LINQToSQLSample] を展開し、Customer クラスをクリックします。

    Bb655880.alert_note(ja-jp,VS.90).gifメモ :

    Customer クラスが使用可能でない場合は、[キャンセル] をクリックし、プロジェクトをビルドしてからウィザードを再実行します。

  6. [完了] をクリックしてデータ ソースを作成し、Customer エンティティ クラスを [データ ソース] ウィンドウに追加します。

エンティティ クラスへの Windows フォーム上のコントロールのバインド

[データ ソース] ウィンドウからフォームにテーブルまたはフィールドをドラッグして、エンティティ クラスにデータ バインドされるコントロールを Windows フォームに追加できます。

エンティティ クラスにバインドされるコントロールを追加するには

  1. ソリューション エクスプローラで、Form1 を右クリックし、[デザイナの表示] をクリックします。

  2. [データ ソース] ウィンドウで、[Customer] を展開します。

  3. CompanyName の横にあるドロップダウン矢印をクリックして、[Label] をクリックします。

  4. [CompanyName] をフォームにドラッグします。

  5. [データ ソース] ウィンドウから Form1 に [Orders] をドラッグします。それを [CompanyName] の下に配置します。

  6. ソリューション エクスプローラで、Form1 を右クリックし、[コードの表示] をクリックします。

  7. Form クラスの先頭で、また特定のメソッドの外部で、フォームに次のコードを追加します。

    private NorthwindSampleDataContext northwindSampleDataContext1
        = new NorthwindSampleDataContext();
    
  8. Form_Load イベントのイベント ハンドラを作成し、イベント ハンドラに次のコードを追加します。

    customerBindingSource.DataSource
        = northwindSampleDataContext1.Customers;
    
  9. F5 キーを押してコードを実行します。

  10. フォームが開いたら、bindingNavigatorMoveNextItem ボタンをクリックして会社間をスクロールし、選択した顧客の注文を表示するように ordersDataGridView が更新されていることを確認します。

変更の保存

O/R デザイナにコントロールを追加するときに、bindingNavigator の [保存] ボタンは有効になっていません。変更を保存できるようにするには、まず [保存] ボタンを有効にしてから、変更されたデータを保存するコードを追加する必要があります。

[保存] ボタンを有効にするには

  1. bindingNavigator の [保存] ボタン (フロッピー ディスクのアイコンのボタン) をクリックします。

  2. [プロパティ] ウィンドウで、Enabled プロパティを True に設定します。

  3. 保存ボタンをダブルクリックして、イベント ハンドラを作成し、コード エディタに切り替えます。

  4. [保存] ボタンのイベント ハンドラに次のコードを追加します。

    northwindSampleDataContext1.SubmitChanges();
    
  5. F5 キーを押してコードを実行します。

  6. Shipped Date フィールドの 1 つの値を変更し、Tab キーを押して変更をコミットします。

  7. [データの保存] をクリックします。

  8. フォームを閉じます

  9. F5 キーを押し、変更が保存されたことを確認します。

参照

処理手順

方法 : データベースに接続する (C#)

方法 : フォームに関連データを表示する

方法 : LINQ クエリにデータ バインドする

概念

C# での LINQ の使用

その他の技術情報

データへの接続 (Visual C#)