Visual Studio の LINQ to SQL ツール

LINQ to SQL は、Microsoft によってリリースされた最初のオブジェクト リレーショナル マッピング テクノロジです。 これは基本のシナリオで適切に動作し、Visual Studio で今後もサポートされますが、開発はもうされません。 LINQ to SQL は、既にそれが使用されているレガシ アプリケーションの保守時、または SQL Server を使用する、複数のテーブルとマッピングする必要がない単純なアプリケーションで使用してください。 一般に、新しいアプリケーションでオブジェクト リレーショナル マッピング レイヤーが必要な場合は、Entity Framework を使用してください。

LINQ to SQL ツールをインストールする

Visual Studio で、SQL テーブルを表す LINQ to SQL クラスを作成するには、オブジェクト リレーショナル デザイナー (O/R デザイナー) を使用します。 O/R デザイナーは、.dbml ファイルを編集するための UI です。 デザイン サーフェイスで .dbml ファイルを編集する場合、LINQ to SQL ツールが必要です。これは、Visual Studio のどのワークロードの一部としても既定ではインストールされません。

LINQ to SQL ツールをインストールするには、Visual Studio のインストーラーを起動して [変更][個別のコンポーネント] タブを順に選択し、次いで [コード ツール] カテゴリの下の [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 クラス] を選択します。

LINQ to SQL クラス

Visual Studio は、.dbml ファイルを作成し、それをソリューションに追加します。 これが、XML マッピング ファイルとそれに関連するコード ファイルです。

ソリューション エクスプローラーでの LINQ to SQL クラス

.dbml ファイルを選択すると、Visual Studio は、モデルを視覚的に作成できる O/R デザイナーの画面を表示します。 次の図は、Northwind の Customers テーブルと Orders テーブルがサーバー エクスプローラーからドラッグされた後のデザイナーを示しています。 テーブル間の関係に着目してください。

LINQ to SQL デザイナー

重要

O/R デザイナーは、1:1 のマッピング関係のみがサポートされる単純なオブジェクト リレーショナル マッパーです。 つまり、エンティティ クラスには、データベース テーブルまたはビューとの 1:1 のマッピング関係しか持たせることができません。 結合テーブルにエンティティ クラスをマッピングする場合などの複雑なマッピングは、サポートされていません。複雑なマッピングには、Entity Framework を使用します。 また、デザイナーは一方向のコード ジェネレーターです。 つまり、デザイナー サーフェイスに加えた変更だけがコード ファイルに反映されます。 O/R デザイナーには、コード ファイルに手動で加えた変更は反映されません。 コード ファイルに手動で加えた変更は、デザイナーを保存してコードを再生成するときに上書きされます。 ユーザー コードを追加し、によって生成されたクラスを拡張する方法については、 O/R デザイナーを参照してください方法。O/R デザイナーで生成されたコードを拡張する

DataContext を作成および構成する

プロジェクトに LINQ to SQL クラス項目を追加し、O/R デザイナーを開くと、空のデザイン サーフェイスに、構成の準備ができた空の DataContext が表示されます。 DataContext は、デザイン サーフェイスにドラッグされた最初の項目から提供される接続情報で構成されます。 したがって、DataContext は、デザイン サーフェイスにドロップされた最初の項目の接続情報によって構成されます。 DataContext クラスの詳細については、「DataContext メソッド (O/R デザイナー)」を参照してください。

データベース テーブルおよびビューにマップするエンティティ クラスを作成する

テーブルやビューにマッピングするエンティティ クラスを作成するには、データベース テーブルやビューをサーバー エクスプローラーまたはデータベース エクスプローラーから O/R デザイナーにドラッグします。 前のセクションで示したように、DataContext は、デザイン サーフェイスにドラッグされる最初の項目が提供する接続情報で構成されます。 O/R デザイナーに別の接続を使用する項目が後で追加された場合は、DataContext の接続を変更できます。 詳細については、「方法:テーブルとビューにマップされた LINQ to SQL クラスを作成する (O/R デザイナー)」を参照してください。

ストアド プロシージャおよび関数を呼び出す DataContext メソッドを作成する

ストアド プロシージャまたは関数を呼び出す (それらにマップされている) DataContext メソッドを作成するには、それらをサーバー エクスプローラーまたはデータベース エクスプローラーから O/R デザイナーにドラッグします。 ストアド プロシージャと関数は、DataContext のメソッドとして O/R デザイナーに追加されます。

Note

サーバー エクスプローラーまたはデータベース エクスプローラーから 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 には、Context Namespace プロパティと Entity Namespace プロパティがあります。 これらのプロパティは、DataContext およびエンティティ クラスのコードが生成される名前空間を決定します。 既定では、これらのプロパティは空であり、DataContext およびエンティティ クラスはアプリケーションの名前空間に生成されます。 アプリケーションの名前空間以外の名前空間にコードを生成するには、[Context Namespace] プロパティ、[Entity Namespace] プロパティ、またはその両方に値を入力します。

リファレンス コンテンツ

関連項目