依存関係の解決

Note

EF6 以降のみ - このページで説明する機能、API などは、Entity Framework 6 で導入されました。 以前のバージョンを使用している場合、一部またはすべての情報は適用されません。

EF6 以降の Entity Framework には、必要なサービスの実装を取得するための汎用のメカニズムが搭載されています。 つまり、EF は、なんらかのインターフェイスや基底クラスのインスタンスを使用するとき、そのインターフェイスまたは基底クラスの具象実装を要求します。 これは、IDbDependencyResolver インターフェイスを使用して実現されます。

public interface IDbDependencyResolver
{
    object GetService(Type type, object key);
}

GetService メソッドは通常、EF によって呼び出され、EF またはアプリケーションから指定された IDbDependencyResolver の実装によって処理されます。 呼び出しの際、type 引数には、要求するサービスのインターフェイスまたは基底クラスの型が、また、key オブジェクトには null、または要求するサービスについてのコンテキスト情報を提供するオブジェクトが渡されます。

特に記載のない限り、返されたオブジェクトは、singleton として使用できるため、スレッドセーフである必要があります。 多くの場合、返されるオブジェクトはファクトリです。その場合、ファクトリそのものはスレッドセーフである必要がありますが、ファクトリから返されるオブジェクトはスレッドセーフである必要はありません。ファクトリからは、使用ごとに新しいインスタンスが要求されるためです。

この記事では、IDbDependencyResolver の実装方法について詳しくは取り上げません。EF による GetService 呼び出しの対象となるサービスの型 (つまり、インターフェイスと基底クラスの型) と、その各呼び出しの key オブジェクトのセマンティクスに関するリファレンスとしてご利用ください。

System.Data.Entity.IDatabaseInitializer<TContext>

導入されたバージョン: EF6.0.0

返されるオブジェクト: 指定したコンテキスト型のデータベース初期化子

Key: 使用されません。null になります。

Func<System.Data.Entity.Migrations.Sql.MigrationSqlGenerator>

導入されたバージョン: EF6.0.0

返されるオブジェクト: Migrations など、データベースの作成 (データベース初期化子を使用したデータベース作成など) を伴う操作に使用できる SQL ジェネレーターを作成するためのファクトリ。

Key: ADO.NET プロバイダーのインバリアント名を表す文字列。SQL の生成対象となるデータベースの種類を指定します。 たとえば "System.Data.SqlClient" が key の場合、SQL Server の SQL ジェネレーターが返されます。

Note

EF6 のプロバイダー関連サービスの詳細については、「EF6 プロバイダー モデル」のセクションを参照してください。

System.Data.Entity.Core.Common.DbProviderServices

導入されたバージョン: EF6.0.0

返されるオブジェクト: 特定のプロバイダーのインバリアント名に使用する EF プロバイダー

Key: ADO.NET プロバイダーのインバリアント名を表す文字列。プロバイダーを必要とするデータベースの種類を指定します。 たとえば "System.Data.SqlClient" が key の場合、SQL Server のプロバイダーが返されます。

Note

EF6 のプロバイダー関連サービスの詳細については、「EF6 プロバイダー モデル」のセクションを参照してください。

System.Data.Entity.Infrastructure.IDbConnectionFactory

導入されたバージョン: EF6.0.0

返されるオブジェクト: EF がデータベース接続を作成するときに慣例的に使用される接続ファクトリ。 つまり、EF に対して接続も接続文字列も指定せず、また、app.config と web.config にも接続文字列が見つからなかった場合、慣例的にこのサービスを使用して接続が作成されます。 接続ファクトリを変更することにより、EF によって既定で使用されるデータベースの種類を変更できます (SQL Server Compact Edition など)。

Key: 使用されません。null になります。

Note

EF6 のプロバイダー関連サービスの詳細については、「EF6 プロバイダー モデル」のセクションを参照してください。

System.Data.Entity.Infrastructure.IManifestTokenService

導入されたバージョン: EF6.0.0

返されるオブジェクト: 接続からプロバイダー マニフェスト トークンを生成できるサービス。 このサービスは通常、2 とおりの方法で使用されます。 1 つ目は、モデルを構築する際に、データベースへの Code First 接続を防ぐための使い方です。 2 つ目は、Code First を強制して特定のデータベース バージョンのモデルを構築する使い方です。たとえば SQL Server 2008 が使用されることがある場合でも、SQL Server 2005 のモデルを強制できます。

オブジェクトの有効期間: Singleton。同じオブジェクトが複数回使用されたり、異なるスレッドから同時に使用されたりする場合があります。

Key: 使用されません。null になります。

System.Data.Entity.Infrastructure.IDbProviderFactoryService

導入されたバージョン: EF6.0.0

返されるオブジェクト: 特定の接続からプロバイダー ファクトリを取得できるサービス。 .NET 4.5 では、プロバイダーに対して接続からパブリックにアクセスできます。 このサービスの .NET 4 における既定の実装では、なんらかのヒューリスティックを使用して、一致するプロバイダーが検索されます。 それが失敗した場合、このサービスの新しい実装を登録して、適切に解決することができます。

Key: 使用されません。null になります。

Func<DbContext, System.Data.Entity.Infrastructure.IDbModelCacheKey>

導入されたバージョン: EF6.0.0

返されるオブジェクト: 特定のコンテキストのモデル キャッシュ キーを生成するファクトリ。 既定では、プロバイダーごとに、1 つの DbContext 型につき 1 つのモデルが EF によりキャッシュされます。 このサービスの異なる実装を使用して、他の情報 (スキーマ名など) をキャッシュ キーに追加できます。

Key: 使用されません。null になります。

System.Data.Entity.Spatial.DbSpatialServices

導入されたバージョン: EF6.0.0

返されるオブジェクト: 基本的な EF プロバイダーに geography 空間型と geometry 空間型のサポートを追加する EF 空間プロバイダー。

Key: DbSptialServices には 2 とおりの要求方法があります。 1 つ目は、DbProviderInfo オブジェクト (インバリアント名とマニフェスト トークンを含む) をキーとしてプロバイダー固有の空間サービスを要求する方法です。 2 つ目は、キーを指定せずに DbSpatialServices を要求する方法です。 これは、スタンドアロンの DbGeography 型または DbGeometry 型を作成するときに使用される "グローバル空間プロバイダー" の解決に使用されます。

Note

EF6 のプロバイダー関連サービスの詳細については、「EF6 プロバイダー モデル」のセクションを参照してください。

Func<System.Data.Entity.Infrastructure.IDbExecutionStrategy>

導入されたバージョン: EF6.0.0

返されるオブジェクト: 再試行など、データベースに対してクエリやコマンドが実行されたときの動作をプロバイダーが実装できるようにするサービスを作成するためのファクトリ。 実装が指定されなかった場合は、EF により、単純にコマンドが実行されて、スローされた例外があれば伝達されます。 SQL Server の場合、このサービスを使用して再試行ポリシーを指定できます。これは特に、実行対象が SQL Azure などのクラウドベースのデータベース サーバーである場合に便利です。

Key: プロバイダーのインバリアント名と、オプションで実行戦略の使用対象となるサーバー名とを含む ExecutionStrategyKey オブジェクト。

Note

EF6 のプロバイダー関連サービスの詳細については、「EF6 プロバイダー モデル」のセクションを参照してください。

Func<DbConnection, string, System.Data.Entity.Migrations.History.HistoryContext>

導入されたバージョン: EF6.0.0

返されるオブジェクト: EF Migrations によって使用される __MigrationHistory テーブルへの HistoryContext のマッピングをプロバイダーが構成できるようにするファクトリ。 HistoryContext は、Code First の DbContext であり、テーブルの名前や列のマッピング仕様などを変更するために、通常の fluent API を使用して構成できます。

Key: 使用されません。null になります。

Note

EF6 のプロバイダー関連サービスの詳細については、「EF6 プロバイダー モデル」のセクションを参照してください。

System.Data.Common.DbProviderFactory

導入されたバージョン: EF6.0.0

返されるオブジェクト: 特定のプロバイダーのインバリアント名に使用する ADO.NET プロバイダー。

Key: ADO.NET プロバイダーのインバリアント名を表す文字列。

Note

既定の実装で標準的な ADO.NET プロバイダー登録が使用されるため、通常、このサービスを直接変更することはありません。 EF6 のプロバイダー関連サービスの詳細については、「EF6 プロバイダー モデル」のセクションを参照してください。

System.Data.Entity.Infrastructure.IProviderInvariantName

導入されたバージョン: EF6.0.0

返されるオブジェクト: 特定のタイプの DbProviderFactory に対し、プロバイダーのインバリアント名を決定するために使用されるサービス。 このサービスの既定の実装では、ADO.NET プロバイダー登録が使用されます。 つまり、EF によって DbProviderFactory が解決されるために、通常の方法では ADO.NET プロバイダーが登録されていない場合、このサービスの解決も必要になります。

Key: インバリアント名を必要とする DbProviderFactory インスタンス。

Note

EF6 のプロバイダー関連サービスの詳細については、「EF6 プロバイダー モデル」のセクションを参照してください。

System.Data.Entity.Core.Mapping.ViewGeneration.IViewAssemblyCache

導入されたバージョン: EF6.0.0

返されるオブジェクト: 事前生成済みビューを含んだアセンブリのキャッシュ。 検出処理を実行せずに、事前生成済みビューが含まれているアセンブリを EF に知らせるために、通常、置換が使用されます。

Key: 使用されません。null になります。

System.Data.Entity.Infrastructure.Pluralization.IPluralizationService

導入されたバージョン: EF6.0.0

返されるオブジェクト: 名前を複数可したり単数化したりする目的で EF によって使用されるサービス。 既定では、英語の複数化サービスが使用されます。

Key: 使用されません。null になります。

System.Data.Entity.Infrastructure.Interception.IDbInterceptor

導入されたバージョン: EF6.0.0

返されるオブジェクト: アプリケーションの起動時に登録する必要のあるインターセプター。 これらのオブジェクトは GetServices 呼び出しを使用して要求されること、また、依存関係リゾルバーから返されるすべてのインターセプターが登録されることに注意してください。

Key: 使用されません。null になります。

Func<System.Data.Entity.DbContext, Action<string>, System.Data.Entity.Infrastructure.Interception.DatabaseLogFormatter>

導入されたバージョン: EF6.0.0

返されるオブジェクト: 指定されたコンテキストに context.Database.Log プロパティが設定されているときに使用されるデータベース ログ フォーマッタを作成するためのファクトリ。

Key: 使用されません。null になります。

Func<System.Data.Entity.DbContext>

導入されたバージョン: EF6.1.0

返されるオブジェクト: パラメーターなしのアクセス可能なコンストラクターがコンテキストに存在しない場合に、Migrations のコンテキスト インスタンスを作成する目的で使用されるファクトリ。

Key: ファクトリを必要とする派生した DbContext の型の Type オブジェクト。

Func<System.Data.Entity.Core.Metadata.Edm.IMetadataAnnotationSerializer>

導入されたバージョン: EF6.1.0

返されるオブジェクト: XML にシリアル化したり XML から逆シリアル化したりして Code First Migrations に使用できるよう、厳密に型指定されたカスタム注釈のシリアル化のためのシリアライザー作成に使用されるファクトリ。

Key: シリアル化または逆シリアル化する注釈の名前。

Func<System.Data.Entity.Infrastructure.TransactionHandler>

導入されたバージョン: EF6.1.0

返されるオブジェクト: 処理のコミット エラーなどの状況で特殊な処理を適用できるようにトランザクションのハンドラーを作成するためのファクトリ。

Key: プロバイダーのインバリアント名と、オプションでトランザクション ハンドラーの使用対象となるサーバー名とを含む ExecutionStrategyKey オブジェクト。