Entity Framework マッピングのシナリオ

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

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

マッピング シナリオ 説明

単純なマッピング

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

エンティティ分割

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

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

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

Table-Per-Hierarchy 継承

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

Table-Per-Type 継承

このマッピング シナリオでは、すべての型が個別のテーブルにマップされます。 基本データ型または派生型のみに属するプロパティは、その型にマップされたテーブルに格納されます。 詳細については、「Walkthrough: Mapping Inheritance - 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)」を参照してください。

複合型

複合型は、キー プロパティを持たないエンティティ型の非スカラー プロパティです。 複合型は他の入れ子になった複合型を含むことができます。 複合型はストレージ モデルのテーブルにマップされます。 詳細については、「How to: Create and Modify Complex Types」を参照してください。

Function Import マッピング

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

変更関数マッピング

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

定義クエリ マッピング

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

クエリ ビュー マッピング

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

AssociationSet マッピング

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

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

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

詳細については、「Association 要素 (CSDL)」を参照してください。

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

参照

処理手順

方法: モデル ファイルとマッピング ファイルを手動で定義する (Entity Framework)

概念

Entity Framework のリソース
オブジェクトの使用 (Entity Framework)

その他のリソース

高度なデータ モデルの定義 (Entity Framework タスク)
ADO.NET Entity Data Model Designer
高度なデータ モデルの定義 (Entity Framework タスク)
サンプル (Entity Framework)