LINQ to Entities の概要

現在、多くのビジネス アプリケーションが、リレーショナル データベースのデータにアクセスするように作成されています。こうしたアプリケーションは、ある時点で、リレーショナル形式で表現されたデータにアクセスする必要があります。リレーショナル モデルは、データを効率的に格納し、検索できるように最適化されています。オブジェクト指向プログラミングに用いられる概念モデリングは想定されていません。正規化された複数のテーブルと単一のクラスとが対応する場合も多く、クラス間のリレーションシップとテーブル間のリレーションシップとで表現方法が異なる場合もあります。ビジネス アプリケーション開発者は、多くの場合、2 つ (またはそれ以上) のプログラミング言語を使ってアプリケーションを開発しています。ビジネス ロジックやプレゼンテーション層には高級言語 (Visual C#、Visual Basic など) が、データベースとの対話にはクエリ言語 (Transact-SQL など) が使用されています。開発者は実質的に複数の言語に精通していることが要求され、開発環境における言語の不整合が生じる原因にもなっています。たとえば、データ アクセス API を使用してデータベースを照会するアプリケーションでは、クエリは文字列リテラルとして引用符で囲んで指定する必要があります。コンパイラはこのクエリ文字列を認識できないため、エラー (無効な構文、参照されている列または行が実際に存在するかどうかなど) のチェック機構が働きません。クエリ パラメータの型チェックや IntelliSense のサポートもありません。

エンティティ フレームワーク を使用することで、開発者は、データを顧客や顧客の住所など、ドメイン固有のオブジェクトおよびプロパティの形式で扱うことができます。そのデータが格納されている、基になるデータベース テーブルや列を意識する必要はありません。詳細については、「Entity Data Model」を参照してください。LINQ により、開発者はアプリケーション コード内でプログラミング言語とクエリ言語を使い分けることなく、セット ベースのクエリを作成できます。ADO.NET は、エンティティ フレームワーク の Object Services インフラストラクチャを通じて、リレーショナル データをはじめとするデータの共通の概念ビューを、.NET 環境のオブジェクトとして公開します。このことによって、LINQ の利用に最適なオブジェクト レイヤが実現されます。この LINQ テクノロジ (LINQ to Entities) によって、開発環境から直接 LINQ 式と LINQ 標準クエリ演算子を使用しながら、エンティティ フレームワーク オブジェクト コンテキストに対する厳密に型指定されたクエリを柔軟に作成できるようになります。このクエリはアプリケーション コードに文字列リテラルとして記述するのではなく、プログラミング言語そのもので表現されます。これは、Microsoft .NET Framework Version 2.0 で通常作成されるアプリケーションと同じです。構文エラーに加え、メンバ名やデータ型のエラーもコンパイラにより検出され、コンパイル時に報告されます。これによって、エンティティ データ モデル とアプリケーション間の型に関する問題の発生を最小限に抑えることができます。

LINQ to Entities クエリでは Object Services インフラストラクチャが使用されます。ObjectContext クラスは、エンティティ データ モデル を CLR オブジェクトとして扱うための主要なクラスです。開発者は、ObjectContext を使用して、ジェネリック型の ObjectQuery インスタンスを作成します。ObjectQuery ジェネリック クラスは、型指定されたエンティティのインスタンスまたはコレクションを返すクエリを表します。返されたエンティティ オブジェクトは、オブジェクト コンテキストで更新でき、オブジェクト コンテキストに配置されます。これは、匿名型のメンバとして返されたエンティティ オブジェクトについても同様です。

このセクションのトピック

参照

その他のリソース

LINQ to Entities