Visual Studio の LINQ to SQL ツール
LINQ to SQL は、Microsoft によってリリースされた最初のオブジェクト リレーショナル マッピング テクノロジです。 基本的なシナリオでは適切に機能し、引き続き Visual Studio でサポートされますが、アクティブな開発は行われなくなりました。 LINQ to SQL は、既に使用しているレガシ アプリケーション、または SQL Server を使用し、マルチテーブル マッピングを必要としない単純なアプリケーションで維持する場合に使用します。 一般に、オブジェクト リレーショナル マッピング レイヤーが必要な場合は、新しいアプリケーションで Entity Framework を使用する必要があります。
LINQ to SQL ツールをインストールする
Visual Studio では、オブジェクト リレーショナル デザイナー (O/R デザイナー) を使用して、SQL テーブルを表す LINQ to SQL クラスを作成します。 O/R デザイナーは、.dbml
ファイルを編集するための UI です。 デザイナー 画面 .dbml
ファイルを編集するには、Visual Studio のワークロードの一部として既定でインストールされていない LINQ to SQL ツールが必要です。
LINQ to SQL ツールをインストールするには、Visual Studio インストーラーを起動し、[の変更]選択し、[個々のコンポーネント ] タブ 選択し、[Code Tools カテゴリの下 LINQ to SQL ツール 選択します。
O/R デザイナーとは
O/R デザイナー のデザイン画面には、左側のエンティティ ウィンドウと右側のメソッド ウィンドウという 2 つの異なる領域があります。 エンティティ ペインは、エンティティ クラス、関連付け、継承階層を表示するメイン デザイン 画面です。 [メソッド] ウィンドウは、ストアド プロシージャと関数にマップされている DataContext メソッドを表示するデザイン画面です。
O/R デザイナー は、LINQ to SQL エンティティ クラスと、データベース内のオブジェクトに基づく関連付け (リレーションシップ) 作成するための視覚的なデザイン サーフェイスを提供します。 つまり、O/R デザイナー は、データベース内のオブジェクトにマップするオブジェクト モデルをアプリケーションに作成します。 また、エンティティ クラスとデータベースの間でデータを送受信する、厳密に型指定された DataContext も生成されます。 O/R デザイナー には、ストアド プロシージャと関数を、データを返してエンティティ クラスを設定するための DataContext メソッドにマップする機能も用意されています。 最後に、O/R デザイナー は、エンティティ クラス間の継承関係を設計する機能を提供します。
O/R デザイナーを開く
LINQ to SQL エンティティ モデルをプロジェクトに追加するには、[プロジェクト] >[新しい項目の追加]選択し、プロジェクト項目の一覧から [LINQ to SQL クラス] 選択します。
Visual Studio によって .dbml
ファイルが作成され、ソリューションに追加されます。 これは、XML マッピング ファイルとそれに関連するコード ファイルです。
.dbml
ファイルを選択すると、モデルを視覚的に作成できる O/R デザイナー 画面が Visual Studio に表示されます。 次の図は、Northwind の Customers
テーブルと Orders
テーブルがサーバー エクスプローラーからドラッグされた後のデザイナーを示しています。 テーブル間のリレーションシップに注意してください。
重要
O/R デザイナー は、1 対 1 のマッピング リレーションシップのみをサポートしているため、単純なオブジェクト リレーショナル マッパーです。 つまり、エンティティ クラスは、データベース テーブルまたはビューとの 1 対 1 のマッピング リレーションシップのみを持つことができます。 エンティティ クラスを結合テーブルにマッピングするなど、複雑なマッピングはサポートされていません。複雑なマッピングには Entity Framework を使用します。 さらに、デザイナーは一方向コード ジェネレーターです。 つまり、デザイナー 画面に加えた変更のみがコード ファイルに反映されます。 コード ファイルに対する手動変更は、O/R デザイナーには反映されません。 コード ファイルで手作業で行った変更は、デザイナーが保存されてコードが再生成されると上書きされます。 ユーザー コードを追加し、O/R デザイナーによって生成されたクラスを拡張する方法については、「方法: O/R デザイナーによって生成されたコードを拡張する」を参照してください。
DataContext を作成して構成する
LINQ to SQL Classes 項目をプロジェクトに追加し、O/R デザイナーを開くと、空のデザイン サーフェイスは、構成できる空の DataContext を表します。 DataContext は、デザイン サーフェイスにドラッグされた最初の項目によって提供される接続情報で構成されます。 したがって、DataContext は、デザイン サーフェイスにドロップされた最初の項目からの接続情報を使用して構成されます。 DataContext クラスの詳細については、「DataContext メソッド (O/R デザイナー)を参照してください。
データベース テーブルとビューにマップするエンティティ クラスを作成する
テーブルとビューにマップされたエンティティ クラスを作成するには、Server Explorer または Database Explorer から O/R デザイナーにデータベース テーブルとビューをドラッグします。 前のセクションで示したように、DataContext は、デザイン サーフェイスにドラッグされた最初の項目によって提供される接続情報で構成されます。 別の接続を使用する後続の項目が O/R デザイナーに追加された場合は、DataContextの接続を変更できます。 詳細については、「方法: テーブルとビューにマップされた LINQ to SQL クラスを作成する (O/R デザイナー)を参照してください。
ストアド プロシージャと関数を呼び出す DataContext メソッドを作成する
ストアド プロシージャと関数を呼び出す (マップされる) DataContext メソッドを作成するには、Server Explorer や データベース エクスプローラー から O/R デザイナーにドラッグします。 ストアド プロシージャと関数は、DataContextのメソッドとして O/R デザイナー に追加されます。
手記
ストアド プロシージャと関数を Server Explorer または Database Explorer から O/R デザイナーにドラッグすると、生成される DataContext メソッドの戻り値の型は、項目をドロップする場所によって異なります。 詳細については、「DataContext メソッド (O/R デザイナー)を参照してください。
ストアド プロシージャを使用してエンティティ クラスとデータベースの間でデータを保存するように DataContext を構成する
前述のように、ストアド プロシージャと関数を呼び出す DataContext メソッドを作成できます。 さらに、挿入、更新、および削除を実行する既定の LINQ to SQL ランタイム動作に使用されるストアド プロシージャを割り当てることもできます。 詳細については、「方法: ストアド プロシージャを割り当てて更新、挿入、および削除を実行する (O/R デザイナー)を参照してください。
継承と O/R デザイナー
他のオブジェクトと同様に、LINQ to SQL クラスは継承を使用し、他のクラスから派生させることができます。 データベースでは、継承リレーションシップはいくつかの方法で作成されます。 O/R デザイナー では、リレーショナル システムで実装されることが多いため、単一テーブル継承の概念がサポートされています。 詳細については、「方法: O/R デザイナーを使用して継承を構成する」を参照してください。
LINQ to SQL のクエリ
O/R デザイナー によって作成されたエンティティ クラスは、言語統合クエリ (LINQ)で使用するように設計されています。 詳細については、「方法:情報を照会する」を参照してください。
生成された DataContext コードとエンティティ クラス コードを異なる名前空間に分離する
O/R デザイナー は、DataContextの コンテキスト名前空間 プロパティとエンティティ名前空間 プロパティ を提供します。 これらのプロパティは、DataContext およびエンティティ クラス コードが生成される名前空間を決定します。 既定では、これらのプロパティは空であり、DataContext およびエンティティ クラスはアプリケーションの名前空間に生成されます。 アプリケーションの名前空間以外の名前空間にコードを生成するには、コンテキスト名前空間の またはエンティティ名前空間 プロパティ 値を入力します。