Abhängigkeitsauflösung
Hinweis
Nur EF6 und höher: Die Features, APIs usw., die auf dieser Seite erläutert werden, wurden in Entity Framework 6 eingeführt. Wenn Sie eine frühere Version verwenden, gelten manche Informationen nicht.
Ab EF6 enthält Entity Framework einen allgemeinen Mechanismus zum Abrufen von Implementierungen von erforderlichen Diensten. Wenn also EF eine Instanz einiger Schnittstellen oder Basisklassen verwendet, wird eine konkrete Implementierung der Schnittstelle oder Basisklasse angefordert. Dies erfolgt über die Verwendung der IDbDependencyResolver-Schnittstelle:
public interface IDbDependencyResolver
{
object GetService(Type type, object key);
}
Die GetService-Methode wird in der Regel von EF aufgerufen und von einer Implementierung von IDbDependencyResolver verarbeitet, die entweder von EF oder von der Anwendung bereitgestellt wird. Wenn das Typargument aufgerufen wird, ist das Typargument der Schnittstellen- oder Basisklassentyp des angeforderten Diensts, und das Schlüsselobjekt ist entweder NULL oder ein Objekt, das Kontextinformationen zum angeforderten Dienst bereitstellt.
Sofern nicht anders angegeben, muss jedes zurückgegebene Objekt threadsicher sein, damit es als Singleton verwendet werden kann. In vielen Fällen ist das zurückgegebene Objekt eine Factory. In diesem Fällen muss die Factory selbst threadsicher sein, aber das von der Factory zurückgegebene Objekt muss nicht threadsicher sein, da für jede Verwendung eine neue Instanz der Factory angefordert wird.
Dieser Artikel enthält keine vollständigen Details zur Implementierung von IDbDependencyResolver, sondern dient stattdessen als Referenz für die Diensttypen (d. h. die Schnittstellen- und Basisklassentypen), für die EF GetService aufruft, sowie die Semantik des Schlüsselobjekts für jeden dieser Aufrufe.
System.Data.Entity.IDatabaseInitializer<TContext>
Eingeführt in Version: EF6.0.0
Zurückgegebenes Objekt: ein Datenbankinitialisierer für den angegebenen Kontexttyp
Schlüssel: Nicht verwendet; ist NULL
Func<System.Data.Entity.Migrations.Sql.MigrationSqlGenerator>
Eingeführt in Version: EF6.0.0
Zurückgegebenes Objekt: eine Factory zum Erstellen eines SQL-Generators, der für Migrationsvorgänge und andere Aktionen verwendet werden kann, die dazu führen, dass eine Datenbank erstellt wird, z. B. für die Datenbankerstellung mit Datenbankinitialisierern.
Schlüssel: Eine Zeichenfolge, die den invarianten ADO.NET-Anbieternamen enthält, der den Datenbanktyp angibt, für den SQL-Code generiert wird. Der SQL Server-Generator wird beispielsweise für den Schlüssel „System.Data.SqlClient“ zurückgegeben.
Hinweis
Weitere Informationen zu anbieterbezogenen Diensten in EF6 finden Sie im Abschnitt zum EF6-Anbietermodell.
System.Data.Entity.Core.Common.DbProviderServices
Eingeführt in Version: EF6.0.0
Zurückgegebenes Objekt: der EF-Anbieter, der für einen bestimmten invarianten Anbieternamen verwendet werden soll
Schlüssel: eine Zeichenfolge, die den invarianten ADO.NET-Anbieternamen enthält, der den Datenbanktyp angibt, für den ein Anbieter erforderlich ist. Der SQL Server-Anbieter wird beispielsweise für den Schlüssel „System.Data.SqlClient“ zurückgegeben.
Hinweis
Weitere Informationen zu anbieterbezogenen Diensten in EF6 finden Sie im Abschnitt zum EF6-Anbietermodell.
System.Data.Entity.Infrastructure.IDbConnectionFactory
Eingeführt in Version: EF6.0.0
Zurückgegebenes Objekt: die Verbindungsfactory, die verwendet wird, wenn EF eine Datenbankverbindung nach Konvention erstellt. Das heißt, wenn keine Verbindung oder Verbindungszeichenfolge ef übergeben wird und keine Verbindungszeichenfolge im app.config
oder web.config
gefunden werden können, wird dieser Dienst verwendet, um eine Verbindung nach Konvention zu erstellen. Wenn Sie die Verbindungsfactory ändern, kann EF standardmäßig einen anderen Datenbanktyp (z. B. SQL Server Compact Edition) verwenden. Speichern Sie nie Kennwörter oder andere vertrauliche Daten im Konfigurationsanbietercode oder in Nur-Text-Konfigurationsdateien. Geben Sie Geheimnisse außerhalb des Projekts an, damit sie nicht versehentlich in ein Quellcoderepository übernommen werden können. Erwägen Sie den Schutz der Inhalte der Konfigurationsdatei mithilfe der geschützten Konfiguration.
Schlüssel: Nicht verwendet; ist NULL
Hinweis
Weitere Informationen zu anbieterbezogenen Diensten in EF6 finden Sie im Abschnitt zum EF6-Anbietermodell.
System.Data.Entity.Infrastructure.IManifestTokenService
Eingeführt in Version: EF6.0.0
Zurückgegebenes Objekt: ein Dienst, der ein Anbietermanifesttoken aus einer Verbindung generieren kann. Dieser Dienst wird in der Regel auf zwei Arten verwendet. Zunächst kann damit verhindert werden, dass beim Erstellen eines Modells Code First eine Verbindung mit der Datenbank herstellt. Außerdem kann damit erzwungen werden, dass Code First ein Modell für eine bestimmte Datenbankversion erstellt, z. B. um ein Modell für SQL Server 2005 zu erzwingen, auch wenn manchmal SQL Server 2008 verwendet wird.
Objektlebensdauer: Singleton – dasselbe Objekt kann mehrmals und parallel von verschiedenen Threads verwendet werden
Schlüssel: Nicht verwendet; ist NULL
System.Data.Entity.Infrastructure.IDbProviderFactoryService
Eingeführt in Version: EF6.0.0
Zurückgegebenes Objekt: ein Dienst, der eine Anbieterfactory aus einer bestimmten Verbindung abrufen kann. In .NET 4.5 kann der Anbieter über die Verbindung öffentlich zugänglich sein. In .NET 4 verwendet die Standardimplementierung dieses Diensts einige Heuristiken, um den passenden Anbieter zu ermitteln. Wenn diese fehlschlagen, kann eine neue Implementierung dieses Diensts registriert werden, um eine entsprechende Lösung bereitzustellen.
Schlüssel: Nicht verwendet; ist NULL
Func<DbContext, System.Data.Entity.Infrastructure.IDbModelCacheKey>
Eingeführt in Version: EF6.0.0
Zurückgegebenes Objekt: eine Factory, die einen Modellcacheschlüssel für einen bestimmten Kontext generiert. Standardmäßig speichert EF ein Modell pro DbContext-Typ und pro Anbieter zwischen. Eine andere Implementierung dieses Diensts kann verwendet werden, um dem Cacheschlüssel weitere Informationen hinzuzufügen, z. B. den Schemanamen.
Schlüssel: Nicht verwendet; ist NULL
System.Data.Entity.Spatial.DbSpatialServices
Eingeführt in Version: EF6.0.0
Zurückgegebenes Objekt: ein räumlicher EF-Anbieter, der dem grundlegenden EF-Anbieter für geografische und geometriebezogene räumliche Typen Unterstützung hinzufügt.
Schlüssel: DbSpatialServices wird auf zwei Arten angefordert. Zunächst werden anbieterspezifische räumliche Dienste mithilfe eines DbProviderInfo-Objekts (das den invarianten Namen und das Manifesttoken enthält) als Schlüssel angefordert. Zweitens kann DbSpatialServices ohne Schlüssel angefordert werden. Dies wird verwendet, um den „globalen räumlichen Anbieter“ aufzulösen, der beim Erstellen eigenständiger DbGeography- oder DbGeometry-Typen verwendet wird.
Hinweis
Weitere Informationen zu anbieterbezogenen Diensten in EF6 finden Sie im Abschnitt zum EF6-Anbietermodell.
Func<System.Data.Entity.Infrastructure.IDbExecutionStrategy>
Eingeführt in Version: EF6.0.0
Zurückgegebenes Objekt: eine Factory zum Erstellen eines Diensts, der einem Anbieter ermöglicht, Wiederholungen oder ein anderes Verhalten zu implementieren, wenn Abfragen und Befehle für die Datenbank ausgeführt werden. Wenn keine Implementierung bereitgestellt wird, führt EF einfach die Befehle aus und gibt alle ausgelösten Ausnahmen weiter. Für SQL Server wird dieser Dienst verwendet, um eine Wiederholungsrichtlinie bereitzustellen, die besonders nützlich ist, wenn sie auf cloudbasierten Datenbankservern wie SQL Azure ausgeführt wird.
Schlüssel: ein ExecutionStrategyKey-Objekt, das den invarianten Anbieternamen und optional einen Servernamen enthält, für den die Ausführungsstrategie verwendet wird.
Hinweis
Weitere Informationen zu anbieterbezogenen Diensten in EF6 finden Sie im Abschnitt zum EF6-Anbietermodell.
Func<DbConnection, string, System.Data.Entity.Migrations.History.HistoryContext>
Eingeführt in Version: EF6.0.0
Zurückgegebenes Objekt: eine Factory, die einem Anbieter ermöglicht, die Zuordnung des HistoryContext zur Tabelle __MigrationHistory
zu konfigurieren, die von EF-Migrationsvorgängen verwendet wird. Der HistoryContext ist ein Code First-DbContext und kann mithilfe der normalen Fluent-API konfiguriert werden, um Elemente wie den Namen der Tabelle und die Spaltenzuordnungsspezifikationen zu ändern.
Schlüssel: Nicht verwendet; ist NULL
Hinweis
Weitere Informationen zu anbieterbezogenen Diensten in EF6 finden Sie im Abschnitt zum EF6-Anbietermodell.
System.Data.Common.DbProviderFactory
Eingeführt in Version: EF6.0.0
Zurückgegebenes Objekt: der ADO.NET-Anbieter, der für einen bestimmten invarianten Anbieternamen verwendet werden soll.
Schlüssel: eine Zeichenfolge, die den invarianten Namen des ADO.NET-Anbieters enthält
Hinweis
Dieser Dienst wird in der Regel nicht direkt geändert, da die Standardimplementierung die normale ADO.NET-Anbieterregistrierung verwendet. Weitere Informationen zu anbieterbezogenen Diensten in EF6 finden Sie im Abschnitt zum EF6-Anbietermodell.
System.Data.Entity.Infrastructure.IProviderInvariantName
Eingeführt in Version: EF6.0.0
Zurückgegebenes Objekt: ein Dienst, der verwendet wird, um einen invarianten Anbieternamen für einen bestimmten DbProviderFactory-Typ zu bestimmen. Die Standardimplementierung dieses Diensts verwendet die ADO.NET-Anbieterregistrierung. Wenn der ADO.NET-Anbieter nicht auf die normale Weise registriert wird, bedeutet dies, dass es dann auch erforderlich ist, diesen Dienst aufzulösen, da DbProviderFactory von EF aufgelöst wird.
Schlüssel: die DbProviderFactory-Instanz, für die ein invarianter Name erforderlich ist.
Hinweis
Weitere Informationen zu anbieterbezogenen Diensten in EF6 finden Sie im Abschnitt zum EF6-Anbietermodell.
System.Data.Entity.Core.Mapping.ViewGeneration.IViewAssemblyCache
Eingeführt in Version: EF6.0.0
Zurückgegebenes Objekt: ein Cache der Assemblys, die vorab generierte Sichten enthalten. Ein Ersatz wird in der Regel verwendet, um EF zu informieren, welche Assemblys vorab generierte Sichten enthalten, ohne dass eine Ermittlung erforderlich ist.
Schlüssel: Nicht verwendet; ist NULL
System.Data.Entity.Infrastructure.Pluralization.IPluralizationService
Eingeführt in Version: EF6.0.0
Zurückgegebenes Objekt: ein Dienst, der von EF zum Pluralisieren und Singularisieren von Namen verwendet wird. Standardmäßig wird ein englischsprachiger Pluralisierungsdienst verwendet.
Schlüssel: Nicht verwendet; ist NULL
System.Data.Entity.Infrastructure.Interception.IDbInterceptor
Eingeführt in Version: EF6.0.0
Zurückgegebene Objekte: alle Abfangfunktionen (Interceptors), die beim Starten der Anwendung registriert werden sollen. Beachten Sie, dass diese Objekte mithilfe eines GetServices-Aufrufs angefordert und dass alle Abfangfunktionen registriert werden, die von den einzelnen Abhängigkeitsauflösern zurückgegeben werden.
Schlüssel: Nicht verwendet; ist NULL.
Func<System.Data.Entity.DbContext, Action<string>, System.Data.Entity.Infrastructure.Interception.DatabaseLogFormatter>
Eingeführt in Version: EF6.0.0
Zurückgegebenes Objekt: eine Factory zum Erstellen des Protokollformatierers der Datenbank, der verwendet wird, wenn die context.Database.Log-Eigenschaft auf den angegebenen Kontext festgelegt wurde.
Schlüssel: Nicht verwendet; ist NULL.
Func<System.Data.Entity.DbContext>
Eingeführt in Version: EF6.1.0
Zurückgegebenes Objekt: eine Factory zum Erstellen von Kontextinstanzen für Migrationsvorgänge, wenn der Kontext keinen zugänglichen Konstruktor aufweist.
Schlüssel: das Type-Objekt für den Typ des abgeleiteten DbContext, für den eine Factory erforderlich ist.
Func<System.Data.Entity.Core.Metadata.Edm.IMetadataAnnotationSerializer>
Eingeführt in Version: EF6.1.0
Zurückgegebenes Objekt: Ein Factoryobjekt, das zum Erstellen von Serialisierern für die Serialisierung stark typisierter benutzerdefinierter Anmerkungen verwendet wird, sodass sie für die Verwendung in Code First-Migrationen in XML serialisiert und deserialisiert werden können.
Schlüssel: der Name der Anmerkung, die serialisiert oder deserialisiert wird.
Func<System.Data.Entity.Infrastructure.TransactionHandler>
Eingeführt in Version: EF6.1.0
Zurückgegebenes Objekt: eine Factory zum Erstellen von Handlern für Transaktionen, sodass ein spezielles Verfahren in Situationen wie dem Behandeln von Commitfehlern angewandt werden kann.
Schlüssel: ein ExecutionStrategyKey-Objekt, das den invarianten Anbieternamen und optional einen Servernamen enthält, für den der Transaktionshandler verwendet wird.