Entity Framework の概要Entity Framework overview

Entity Framework は、データ指向のソフトウェア アプリケーション開発をサポートする ADO.NET のテクノロジ セットです。The Entity 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 Framework を使用することで、開発者は、顧客や顧客の住所など、ドメイン固有のオブジェクトおよびプロパティの形式でデータを扱うことができます。そのデータが格納されている、基になるデータベース テーブルや列を意識する必要はありません。The Entity 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 Framework, を使用すると、開発者はデータを操作するときに高い抽象化レベルで作業ができ、従来のアプリケーションよりコードの少ないデータ指向アプリケーションの作成と保守が可能になります。With the Entity 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 Framework は .NET Framework のコンポーネントであるため、.NET Framework バージョン 3.5 SP1 以降がインストールされていれば、どのコンピューターでも Entity Framework アプリケーションを実行できます。Because the Entity Framework is a component of the .NET Framework, Entity Framework applications can run on any computer on which the .NET Framework starting with version 3.5 SP1 is installed.

モデルを利用するGive 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 Framework では、開発者がドメイン モデル (Entity Framework では "概念" モデルとも呼ばれる) 内のエンティティとリレーションシップにクエリを実行し、Entity Framework がそれらの操作をデータ ソース固有のコマンドに変換するという形で、モデルが利用されます。The Entity Framework gives life to models by enabling developers to query entities and relationships in the domain model (called a conceptual model in the Entity Framework) while relying on the Entity 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 Framework では、オブジェクトの種類と定義する追加の構成に基づいて概念モデルを推論できます。The Entity 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 Framework では、必要に応じて、メタデータに基づいてデータベースが生成されます。Entity Framework generates the database as needed based on the metadata. 詳しくは、「モデルの作成」をご覧ください。For more information, see Creating a 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 Data Model の Entity Framework での実装です。CSDL is the Entity 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 Framework では、これらのモデル ファイルとマッピング ファイルを使用して、概念モデルのエンティティとリレーションシップに対する作成、読み取り、更新、削除などの操作が、データ ソースの同等の操作に変換されます。The Entity 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 Framework では、概念モデルのエンティティをデータ ソースのストアド プロシージャにマップする操作もサポートされています。The Entity 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.

オブジェクトをデータにマップするMap 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 Framework では、開発者は、この方法でリレーションシップを表すか、データベースでの表し方にさらに近い形でリレーションシップをモデル化するかを、柔軟に選択できます。The Entity 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 Framework では、この従来の方法ではなく、論理モデルのリレーショナル テーブル、列、および外部キー制約が、概念モデルのエンティティとリレーションシップにマップされます。Instead of taking this traditional approach, the Entity 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.

エンティティ データにアクセスして変更するAccess and change entity data

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

  • LINQ to Entities。LINQ 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 Framework には、EntityClient データ プロバイダーが含まれています。The Entity Framework includes the EntityClient data provider. このプロバイダーでは、接続が管理され、エンティティ クエリがデータ ソース固有のクエリに変換されて、Entity Framework がエンティティ データをオブジェクトに具体化するために使用するデータ リーダーが返されます。This provider manages connections, translates entity queries into data source-specific queries, and returns a data reader that the Entity Framework uses to materialize entity data into objects. オブジェクトの具体化が不要であれば、アプリケーションで Entity SQLEntity SQL クエリを実行して返された読み取り専用のデータ リーダーを使用できるようにすることで、EntityClient プロバイダーを標準の ADO.NET データ プロバイダーと同様に使用することもできます。When object materialization is not required, the EntityClient provider can also be used like a standard ADO.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 Framework アーキテクチャを示しています。The following diagram illustrates the Entity 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.NET プロバイダー モデルが拡張されます。The EntityClient provider extends the ADO.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 Framework には、正規コマンド ツリーをサポートする更新された SqlClient Data Provider が含まれます。The Entity 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 Framework ランタイムに加えて、Visual Studio にはマッピング ツールとモデリング ツールが含まれています。Together with the Entity Framework runtime, Visual Studio includes the mapping and modeling tools. 詳しくは、「モデリングとマッピング」をご覧ください。For more information, see Modeling and Mapping.

詳細情報Learn more

Entity Framework について詳しくは、以下をご覧ください。To learn more about the Entity Framework, see:

はじめに」 - 簡単な Entity Framework アプリケーションの作成方法を示すクイックスタートを使用して、簡単に使い始める方法について説明します。Getting Started - Provides information about how to get up and running quickly using the Quickstart, which shows how to create a simple Entity Framework application.

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

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

関連項目See also