次の方法で共有


Entity Data Model のマッピング シナリオ (アプリケーション シナリオ)

Entity Framework では、さまざまな方法で、概念モデルを Entity Data Model (EDM) のリレーショナル データにマップできます。詳細については、「Entity Framework のデータ モデリング」を参照してください。

現在、以下の Entity Data Model (EDM) のマッピング シナリオが Entity Framework でサポートされています。

マッピング シナリオ 説明

単純なマッピング

このマッピング シナリオでは、概念モデルの各エンティティはストレージ モデルの 1 つのテーブルにマップされます。これは、Entity Data Model ツールで生成される既定のマッピングです。詳細については、「クイック スタート (Entity Framework)」を参照してください。

エンティティ分割

このマッピング シナリオでは、概念モデルの 1 つのエンティティのプロパティが、複数の基になるテーブル内の列にマップされます。このシナリオでは、共通の主キーをこれらのテーブルで共有する必要があります。詳細については、「2 つのテーブルにマップされた単一のエンティティでモデルを定義する方法」を参照してください。

ストレージ モデルでの行方向のパーティション分割

このマッピング シナリオでは、概念モデルの 1 つのエンティティ型が、同じスキーマを持つ複数のテーブルにマップされます。エンティティは、概念モデルで定義された条件に基づいてテーブルにマップされます。たとえば、AdventureWorks Sales ModelSalesOrderHeader エンティティの OnlineOrderFlag プロパティ (Boolean) を使用して、オンライン注文用の 1 つのテーブルとオフライン注文用のもう 1 つのテーブルといったデータ ソース内の別々のテーブルに、エンティティ データをパーティション分割することもできます。詳細については、「Condition 要素 (MappingFragment)」を参照してください。

概念モデルでの行方向のパーティション分割

このマッピング シナリオでは、概念モデル内の同じプロパティを持つ複数のエンティティ型が、1 つのテーブルにマップされます。条件句は、テーブル内のどのデータがどのエンティティ型に属するかを指定するために使用されます。このマッピングは、Table-Per-Hierarchy 継承マッピングに似ています。

Table-Per-Hierarchy 継承

このマッピング シナリオでは、継承階層のすべての型が 1 つのテーブルにマップされます。条件句は、エンティティ型を定義するために使用されます。詳細については、「Table-Per-Hierarchy 継承でモデルを定義する方法 (Entity Framework)」を参照してください。

Table-Per-Type 継承

このマッピング シナリオでは、すべての型が個別のテーブルにマップされます。基本データ型または派生型のみに属するプロパティは、その型にマップされたテーブルに格納されます。詳細については、「Table-Per-Type 継承でモデルを定義する方法 (Entity Framework)」を参照してください。

Table-Per-Concrete-Type 継承

このマッピング シナリオでは、非抽象型がそれぞれ個別のテーブルにマップされます。基本データ型から継承されたプロパティを含めて、派生型のすべてのプロパティにマップされた列がこれらの各テーブルに存在する必要があります。

Multiple-Entity-Sets-per-Type

このマッピング シナリオでは、1 つのエンティティ型が概念モデルの複数の別個のエンティティ セットで表されます。各エンティティ セットは、ストレージ モデルの別個のテーブルにマップされます。詳細については、「Multiple-Entity-Sets-per-Type でモデルを定義する方法 (Entity Framework)」を参照してください。

複合型

複合型は、キー プロパティを持たないエンティティ型の非スカラ プロパティです。複合型は他の入れ子になった複合型を含むことができます。複合型はストレージ モデルのテーブルにマップされます。詳細については、「複合型を使用してモデルを定義する方法 (Entity Framework)」を参照してください。

Function Import マッピング

このシナリオでは、ストレージ モデルのストアド プロシージャが概念モデルの FunctionImport 要素にマップされます。この関数は、マップされたストアド プロシージャを使用してエンティティ データを返すために実行されます。詳細については、「ストアド プロシージャを使用してモデルを定義する方法 (Entity Framework)」を参照してください。

変更関数マッピング

このシナリオでは、データを挿入、更新、および削除するストレージ モデルでストアド プロシージャが定義されます。これらの関数は、特定のエンティティ型に対する更新機能をエンティティ型で提供するために定義されます。詳細については、「ストアド プロシージャのサポート (Entity Framework)」を参照してください。

定義クエリ マッピング

このシナリオでは、データ ソースのテーブルを表すストレージ モデルでクエリが定義されます。このクエリは、SQL Server データベースにマップされる場合、Transact-SQL など、データ ソースのネイティブなクエリ言語で表されます。この DefiningQuery 要素は、概念モデルのエンティティ型にマップされます。このクエリは、ストア固有のクエリ言語で定義されます。詳細については、「DefiningQuery 要素 (EntityContainer SSDL)」を参照してください。定義クエリを使用する場合、更新を標準の更新プロセスによってデータ ソースに保存することはできません。更新を行うには、変更関数マッピングを定義します。詳細については、「ストアド プロシージャのサポート (Entity Framework)」を参照してください。

クエリ ビュー マッピング

このシナリオでは、概念モデルのエンティティ型とストレージ モデルのリレーショナル テーブルの間で、読み取り専用のマッピングが定義されます。このマッピングは、概念モデルのエンティティを返す、ストレージ モデルに対する Entity SQL クエリに基づいて定義されます。詳細については、「QueryView 要素 (EntitySetMapping)」を参照してください。クエリ ビューを使用する場合、更新を標準の更新プロセスによってデータ ソースに保存することはできません。更新を行うには、変更関数マッピングを定義します。詳細については、「ストアド プロシージャのサポート (Entity Framework)」を参照してください。

AssociationSet マッピング

アソシエーションは、エンティティ間のリレーションシップを定義します。一対一または一対多のアソシエーションを使用する単純なマッピングでは、概念モデルのリレーションシップを定義するアソシエーションは、ストレージ モデルのアソシエーションにマップされます。次に示す、さらに高度なアソシエーション セット マッピングもサポートされています。

  • 多対多のアソシエーション。アソシエーションの両方の End は、ストレージ モデルのリンク テーブルにマップされます。

  • 自己アソシエーション。別の Employee とのアソシエーションを持つ Employee など、同じ型の 2 つのエンティティ間のアソシエーションをサポートします。

  • 派生型間のアソシエーション。このマッピングでは、1 つの階層の派生型と別の階層の派生型の間のアソシエーションをサポートします。

詳細については、「アソシエーション (EDM)」を参照してください。

Entity Data Model ツールでサポートされるマッピング シナリオの詳細については、「ADO.NET Entity Data Model デザイナの概要」を参照してください。

参照

概念

Entity Data Model の継承 (アプリケーション シナリオ)
Entity Framework のリソース
Entity Data Model のクエリ (アプリケーションのシナリオ)
Entity Data Model クラスのプログラミング (アプリケーションのシナリオ)
Entity Data Model の定義 (アプリケーション シナリオ)

その他のリソース

プログラミング ガイド (Entity Framework)
サンプル (Entity Framework)