Entity Framework の概要Entity Framework Overview

Entity FrameworkEntity Framework は、データ指向のソフトウェア アプリケーション開発をサポートする ADO.NET のテクノロジ セットです。The Entity FrameworkEntity Framework is a set of technologies in ADO.NET that support the development of data-oriented software applications. データ指向のアプリケーションの設計者と開発者はこれまで、2 つの大きく異なる目的を達成するために苦労してきました。Architects and developers of data-oriented applications have struggled with the need to achieve two very different objectives. 解決すべきビジネス上の問題のエンティティ、リレーションシップ、およびロジックをモデル化する一方で、データの格納と取得に使用するデータ エンジンに取り組む必要もあるからです。They must model the entities, relationships, and logic of the business problems they are solving, and they must also work with the data engines used to store and retrieve the data. データは複数のストレージ システムにまたがる場合があり、それぞれに独自のプロトコルが存在します。単一のストレージ システムを使用するアプリケーションであっても、ストレージ システムの要件と効率的で保守しやすいアプリケーション コードの記述要件のバランスを取る必要があります。The data may span multiple storage systems, each with its own protocols; even applications that work with a single storage system must balance the requirements of the storage system against the requirements of writing efficient and maintainable application code.

Entity FrameworkEntity Framework を使用することで、開発者は、顧客や顧客の住所など、ドメイン固有のオブジェクトおよびプロパティの形式でデータを扱うことができます。そのデータが格納されている、基になるデータベース テーブルや列を意識する必要はありません。The Entity FrameworkEntity Framework enables developers to work with data in the form of domain-specific objects and properties, such as customers and customer addresses, without having to concern themselves with the underlying database tables and columns where this data is stored. Entity FrameworkEntity Framework を使用すると、開発者はデータを操作するときに高い抽象化レベルで作業ができ、従来のアプリケーションよりコードの少ないデータ指向アプリケーションの作成と保守が可能になります。With the Entity FrameworkEntity Framework, developers can work at a higher level of abstraction when they deal with data, and can create and maintain data-oriented applications with less code than in traditional applications. Entity FrameworkEntity Frameworkのコンポーネントである、 .NET Framework.NET FrameworkEntity FrameworkEntity Frameworkアプリケーションを任意のコンピューターでも実行できます、.NET Framework.NET Frameworkバージョン 3.5 SP1 以降がインストールされます。Because the Entity FrameworkEntity Framework is a component of the .NET Framework.NET Framework, Entity FrameworkEntity Framework applications can run on any computer on which the .NET Framework.NET Framework starting with version 3.5 SP1 is installed.

このトピックの以降のセクションでは、Entity FrameworkEntity Framework の詳細について説明します。The following sections in this topic provide more detail about the Entity FrameworkEntity Framework:

モデルの活用Giving Life to Models

アプリケーションやサービスを構築するとき、従来からの一般的な設計アプローチは、アプリケーションまたはサービスをドメイン モデル、論理モデル、および物理モデルの 3 つの部分に分割する方法です。A longstanding and common design approach when building an application or service is the division of the application or service into three parts: a domain model, a logical model, and a physical model. ドメイン モデルでは、モデル化の対象となるシステムに存在するエンティティとリレーションシップを定義します。The domain model defines the entities and relationships in the system that is being modeled. リレーショナル データベースの論理モデルでは、外部キー制約を用いながらエンティティおよびリレーションシップをテーブルとして正規化します。The logical model for a relational database normalizes the entities and relationships into tables with foreign key constraints. 物理モデルでは、パーティション分割やインデックス化などのストレージ情報を指定することで、特定のデータ エンジンの機能に対応します。The physical model addresses the capabilities of a particular data engine by specifying storage details such as partitioning and indexing.

物理モデルは、パフォーマンスを向上させるためにデータベース管理者が調整しますが、アプリケーション コードを記述するプログラマは、主に SQL クエリを記述したりストアド プロシージャを呼び出したりすることによって論理モデルを扱うことに専念します。The physical model is refined by database administrators to improve performance, but programmers writing application code primarily confine themselves to working with the logical model by writing SQL queries and calling stored procedures. ドメイン モデルは通常、アプリケーションの要件を収集して伝達するためのツールとして使用されます。プロジェクトの初期段階でのみ表示および検討され、その後ほとんど使用されないのが一般的です。Domain models are generally used as a tool for capturing and communicating the requirements of an application, frequently as inert diagrams that are viewed and discussed in the early stages of a project and then abandoned. 概念モデルの作成を省略し、実際にリレーショナル データベースのテーブル、列、およびキーを指定することから開始する開発チームも多く存在します。Many development teams skip creating a conceptual model and begin by specifying tables, columns, and keys in a relational database.

Entity FrameworkEntity Frameworkにより開発者は、ドメイン モデルのクエリのエンティティとリレーションシップをモデルにライフ (と呼ばれる、概念中のモデル、 Entity FrameworkEntity Framework) に依存しながら、Entity FrameworkEntity Frameworkものを変換するにはデータ ソース固有のコマンドを操作します。The Entity FrameworkEntity Framework gives life to models by enabling developers to query entities and relationships in the domain model (called a conceptual model in the Entity FrameworkEntity Framework) while relying on the Entity FrameworkEntity Framework to translate those operations to data source–specific commands. これにより、特定のデータ ソースへの依存関係をアプリケーションにハードコーディングしなくても済みます。This frees applications from hard-coded dependencies on a particular data source.

Code First を使用すると、概念モデルはコードのストレージ モデルにマッピングされます。When working with Code First, the conceptual model is mapped to the storage model in code. Entity FrameworkEntity Framework では、オブジェクトの種類と定義する追加の構成に基づいて概念モデルを推論できます。The Entity FrameworkEntity Framework can infer the conceptual model based on the object types and additional configurations that you define. マッピング メタデータは、ドメインの種類を定義した方法とコードで指定する追加の構成情報の組み合わせに基づいて実行時に生成されます。The mapping metadata is generated during run time based on a combination of how you defined your domain types and additional configuration information that you provide in code. Entity FrameworkEntity Framework は、メタデータに基づいて必要に応じてデータベースを生成します。 generates the database as needed based on the metadata. 詳細については、次を参照してください。マッピングの概念モデルの作成とです。For more information, see Creating and Mapping a Conceptual Model.

Entity Data Model ツールでの作業時には、概念モデル、ストレージ モデル、およびこの 2 者間のマッピングは、XML ベースのスキーマで表され、名前の拡張子が同じファイルで定義されます。When working with the Entity Data Model Tools, the conceptual model, the storage model, and the mappings between the two are expressed in XML-based schemas and defined in files that have corresponding name extensions:

  • 概念モデルは概念スキーマ定義言語 (CSDL) で定義されます。Conceptual schema definition language (CSDL) defines the conceptual model. CSDL は、Entity FrameworkEntity Frameworkの実装、 Entity Data Modelです。CSDL is the Entity FrameworkEntity Framework's implementation of the Entity Data Model. ファイル拡張子は .csdl です。The file extension is .csdl.

  • ストア スキーマ定義言語ファイル (SSDL) はストレージ モデル (論理モデルとも呼ばれる) を定義します。Store schema definition language (SSDL) defines the storage model, which is also called the logical model. ファイル拡張子は .ssdl です。The file extension is .ssdl.

  • マッピング仕様言語ファイル (MSL) はストレージ モデルと概念モデルの間のマッピングを定義します。Mapping specification language (MSL) defines the mappings between the storage and conceptual models. ファイル拡張子は .msl です。The file extension is .msl.

ストレージ モデルとマッピングは、概念モデル、データ クラス、またはアプリケーション コードを変更することなく、必要に応じて変更できます。The storage model and mappings can change as needed without requiring changes to the conceptual model, data classes, or application code. ストレージ モデルはプロバイダー固有なので、データ ソースの違いを意識することなく一貫した概念モデルを扱うことができます。Because storage models are provider-specific, you can work with a consistent conceptual model across various data sources.

Entity FrameworkEntity Framework使用方法、これらのモデルおよびマッピングを作成するファイルの読み取り、更新、およびデータ ソースの同等の操作を概念モデルのエンティティとリレーションシップに対する操作を削除します。The Entity FrameworkEntity Framework uses these model and mapping files to create, read, update, and delete operations against entities and relationships in the conceptual model to equivalent operations in the data source. Entity FrameworkEntity Frameworkでも、データ ソース内のストアド プロシージャを概念モデルのエンティティのマッピングをサポートしています。The Entity FrameworkEntity Framework even supports mapping entities in the conceptual model to stored procedures in the data source. 詳細については、次を参照してください。 CSDL、SSDL、MSL 仕様です。For more information, see CSDL, SSDL, and MSL Specifications.

データへのオブジェクトのマッピングMapping Objects to Data

オブジェクト指向プログラミングには、データ ストレージ システムと対話するという難題があります。Object-oriented programming poses a challenge for interacting with data storage systems. クラスの編成はリレーショナル データベース テーブルの編成に似ている場合がありますが、完全に一致するわけではありません。Although the organization of classes frequently mirrors the organization of relational database tables, the fit is not perfect. 正規化された複数のテーブルと単一のクラスが対応する場合も多く、クラス間のリレーションシップとテーブル間のリレーションシップとで表現方法が異なる場合もあります。Multiple normalized tables frequently correspond to a single class, and relationships between classes are often represented differently than relationships between tables are represented. たとえば、販売注文の顧客を表すために、Order クラスは Customer クラスのインスタンスへの参照が含まれているプロパティを使用する一方で、データベースの Order テーブル行には Customer テーブルの主キー値に対応する値がある外部キー列 (または列セット) が含まれている場合があります。For example, to represent the customer for a sales order, an Order class might use a property that contains a reference to an instance of a Customer class, while an Order table row in a database contains a foreign key column (or set of columns) with a value that corresponds to a primary key value in the Customer table. Customer クラスには Orders クラスのインスタンスのコレクションが含まれている Order という名前のプロパティがありますが、データベースの Customer テーブルに同等の列がない場合などです。A Customer class might have a property named Orders that contains a collection of instances of the Order class, while the Customer table in a database has no comparable column. Entity FrameworkEntity Framework は、この方法でリレーションシップを表すか、データベースで表されるリレーションシップに似せるかの柔軟性を開発者に与えます。The Entity FrameworkEntity Framework provides developers with the flexibility to represent relationships in this way, or to more closely model relationships as they are represented in the database.

既存のソリューションでは、"インピーダンスのミスマッチ" とよく呼ばれるこの差異を、オブジェクト指向のクラスやプロパティをリレーショナル テーブルやリレーショナル列にマップするだけで埋めようとしてきました。Existing solutions have tried to bridge this gap, which is frequently called an "impedance mismatch", by only mapping object-oriented classes and properties to relational tables and columns. この従来の方法ではなく、Entity FrameworkEntity Frameworkリレーショナル テーブル、列、および論理モデルの外部キー制約を概念モデルのエンティティとリレーションシップにマップします。Instead of taking this traditional approach, the Entity FrameworkEntity Framework maps relational tables, columns, and foreign key constraints in logical models to entities and relationships in conceptual models. これにより、さらに柔軟にオブジェクトを定義して論理モデルを最適化することが可能になります。This enables greater flexibility both in defining objects and optimizing the logical model. エンティティ データ モデルEntity Data Model ツールでは、概念モデルに基づく拡張可能なデータ クラスが生成されます。The エンティティ データ モデルEntity Data Model tools generate extensible data classes based on the conceptual model. このクラスは、開発者が追加するメンバーで拡張できる部分クラスです。These classes are partial classes that can be extended with additional members that the developer adds. 既定では、特定の概念モデルに対して生成されるクラスは、エンティティをオブジェクトとして具体化したり変更を追跡したり保存したりするサービスを提供する基本クラスから派生します。By default, the classes that are generated for a particular conceptual model derive from base classes that provide services for materializing entities as objects and for tracking and saving changes. 開発者はこのようなクラスを使用して、エンティティとリレーションシップを、アソシエーションによって関連付けられたオブジェクトとして操作できます。Developers can use these classes to work with the entities and relationships as objects related by associations. また、開発者は、概念モデルに生成されるクラスをカスタマイズすることもできます。Developers can also customize the classes that are generated for a conceptual model. 詳細については、次を参照してください。オブジェクトの操作です。For more information, see Working with Objects.

エンティティ データに対するアクセスと変更Accessing and Changing Entity Data

Entity FrameworkEntity Framework は単なるオブジェクト リレーショナル マッピング ソリューションではなく、基本的には、概念モデルのエンティティとリレーションシップとして表されるデータにアプリケーションからアクセスして変更できるようにするためのものです。More than just another object-relational mapping solution, the Entity FrameworkEntity Framework is fundamentally about enabling applications to access and change data that is represented as entities and relationships in the conceptual model. Entity FrameworkEntity Framework はモデル ファイルとマッピング ファイルの情報を使用して、概念モデルで表されるエンティティ型に対するオブジェクト クエリをデータ ソース固有のクエリに変換します。The Entity FrameworkEntity Framework uses information in the model and mapping files to translate object queries against entity types represented in the conceptual model into data source-specific queries. クエリの結果がオブジェクトに具体化する、Entity FrameworkEntity Frameworkを管理します。Query results are materialized into objects that the Entity FrameworkEntity Framework manages. Entity FrameworkEntity Frameworkを概念モデルを照会し、オブジェクトを返す、次の方法を提供します。The Entity FrameworkEntity Framework provides the following ways to query a conceptual model and return objects:

  • LINQ to EntitiesLINQ to Entities. 概念モデルで定義されているエンティティ型を照会するためには、統合言語クエリ (LINQ) のサポートを提供します。Provides Language-Integrated Query (LINQ) support for querying entity types that are defined in a conceptual model. 詳細については、次を参照してください。 LINQ to Entitiesです。For more information, see LINQ to Entities.

  • Entity SQLEntity SQL. 概念モデルのエンティティと直接連動して、サポートする SQL のストレージに依存しない言語エンティティ データ モデルEntity Data Model概念です。A storage-independent dialect of SQL that works directly with entities in the conceptual model and that supports エンティティ データ モデルEntity Data Model concepts. Entity SQLEntity SQL オブジェクトのクエリと EntityClient プロバイダーを使用して実行されるクエリの両方に使用されます。 is used both with object queries and queries that are executed by using the EntityClient provider. 詳細については、次を参照してください。 Entity SQL の概要です。For more information, see Entity SQL Overview.

Entity FrameworkEntity Framework には、EntityClient データ プロバイダーが含まれています。The Entity FrameworkEntity Framework includes the EntityClient data provider. このプロバイダーは接続を管理し、エンティティ クエリをデータ ソース固有のクエリに変換し、Entity FrameworkEntity Framework がエンティティ データをオブジェクトに具体化するために使用するデータ リーダーを返します。This provider manages connections, translates entity queries into data source-specific queries, and returns a data reader that the Entity FrameworkEntity Framework uses to materialize entity data into objects. オブジェクトの具体化する必要がない場合、EntityClient プロバイダーこともできます、標準のようなADO.NETADO.NETデータ プロバイダーを実行するアプリケーションを有効にしてEntity SQLEntity SQLクエリを実行し、返される読み取り専用データ リーダーを使用します。When object materialization is not required, the EntityClient provider can also be used like a standard ADO.NETADO.NET data provider by enabling applications to execute Entity SQLEntity SQL queries and consume the returned read-only data reader. 詳細については、次を参照してください。 Entity Framework の EntityClient プロバイダーです。For more information, see EntityClient Provider for the Entity Framework.

次の図は、データにアクセスするための Entity FrameworkEntity Framework アーキテクチャを示しています。The following diagram illustrates the Entity FrameworkEntity Framework architecture for accessing data:

Entity Framework のアーキテクチャ ダイアグラムEntity Framework Architectural Diagram

エンティティ データ モデルEntity Data Model ツールは、概念モデルのエンティティ コンテナーを表す System.Data.Objects.ObjectContext または System.Data.Entity.DbContext から派生したクラスを生成できます。The エンティティ データ モデルEntity Data Model Tools can generate a class derived from System.Data.Objects.ObjectContext or System.Data.Entity.DbContext that represents the entity container in the conceptual model. このオブジェクト コンテキストは、変更の追跡や ID、同時実行、およびリレーションシップの管理などの機能を提供します。This object context provides the facilities for tracking changes and managing identities, concurrency, and relationships. また、このクラスは、データ ソースに挿入、更新、および削除を書き込む SaveChanges メソッドも公開します。This class also exposes a SaveChanges method that writes inserts, updates, and deletes to the data source. このような変更は、クエリと同様に、システムによって自動的に生成されるコマンドで行うことも、特定のストアド プロシージャを使用するように指定することもできます。Like queries, these changes are either made by commands automatically generated by the system or by stored procedures that are specified by the developer.

データ プロバイダーData Providers

EntityClient プロバイダーは、概念エンティティおよびリレーションシップに従ってデータにアクセスし、ADO.NETADO.NET プロバイダー モデルを拡張します。The EntityClient provider extends the ADO.NETADO.NET provider model by accessing data in terms of conceptual entities and relationships. Entity SQLEntity SQL を使用するクエリを実行します。It executes queries that use Entity SQLEntity SQL. Entity SQLEntity SQL は、EntityClient がデータベースと通信する基盤となるクエリ言語を提供します。 provides the underlying query language that enables EntityClient to communicate with the database. 詳細については、次を参照してください。 Entity Framework の EntityClient プロバイダーです。For more information, see EntityClient Provider for the Entity Framework.

更新された Entity FrameworkEntity Framework の SqlClient Data Provider は、正規コマンド ツリーをサポートしています。The Entity FrameworkEntity Framework includes an updated SqlClient Data Provider that supports canonical command trees. 詳細については、次を参照してください。 Entity Framework 用 SqlClientです。For more information, see SqlClient for the Entity Framework.

Entity Data Model ツールEntity Data Model Tools

Entity FrameworkEntity Framework ランタイムに加えて、Visual Studio 2012Visual Studio 2012 にはマッピング ツールとモデリング ツールが含まれています。Together with the Entity FrameworkEntity Framework runtime, the Visual Studio 2012Visual Studio 2012 includes the mapping and modeling tools. 詳細については、次を参照してください。モデリングとマッピングです。For more information, see Modeling and Mapping.

詳細情報Learning More

Entity FrameworkEntity Framework の詳細については、次のトピックを参照してください。The following topics enable you to learn more about the Entity FrameworkEntity Framework:

はじめにGetting Started
取得する方法に関する情報を提供し、使用して迅速に実行されている、クイック スタート、単純なを作成する方法を示すEntity FrameworkEntity Frameworkアプリケーションです。Provide information about how to get up and running quickly using the Quickstart, which shows how to create a simple Entity FrameworkEntity Framework application.

Entity Framework の用語Entity Framework Terminology
Entity Data Model と Entity FrameworkEntity Framework で使用されている用語や Entity FrameworkEntity Framework のドキュメントで使用されている用語を多数定義しています。Defines many of the terms that are introduced by the Entity Data Model and the Entity FrameworkEntity Framework and that are used in Entity FrameworkEntity Framework documentation.

Entity Framework のリソースEntity Framework Resources
概念に関するトピックへのリンクや Entity FrameworkEntity Framework アプリケーションの構築に関する外部トピックおよびリソースへのリンクを示します。Provides links to conceptual topics and links to external topics and resources for building Entity FrameworkEntity Framework applications.

関連項目See Also

ADO.NET Entity FrameworkADO.NET Entity Framework