Beroendelösning

Anmärkning

ENDAST EF6 – De funktioner, API:er osv. som beskrivs på den här sidan introducerades i Entity Framework 6. Om du använder en tidigare version gäller inte en del av eller all information.

Från och med EF6 innehåller Entity Framework en generell mekanism för att hämta implementeringar av tjänster som krävs. När EF använder en instans av vissa gränssnitt eller basklasser ber den alltså om en konkret implementering av gränssnittet eller basklassen som ska användas. Detta uppnås med hjälp av gränssnittet IDbDependencyResolver:

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

GetService-metoden anropas vanligtvis av EF och hanteras av en implementering av IDbDependencyResolver som tillhandahålls antingen av EF eller av programmet. När det anropas är typargumentet gränssnitts- eller basklasstypen för den tjänst som begärs, och nyckelobjektet är antingen null eller ett objekt som tillhandahåller sammanhangsinformation om den begärda tjänsten.

Om inget annat anges måste ett returnerat objekt vara trådsäkert eftersom det kan användas som en singleton. I många fall är det returnerade objektet en fabrik där själva fabriken måste vara trådsäker, men objektet som returneras från fabriken behöver inte vara trådsäkert eftersom en ny instans begärs från fabriken för varje användning.

Den här artikeln innehåller inte fullständig information om hur du implementerar IDbDependencyResolver, utan fungerar i stället som en referens för tjänsttyperna (dvs. gränssnitts- och basklasstyperna) för vilka EF anropar GetService och semantiken för nyckelobjektet för vart och ett av dessa anrop.

System.Data.Entity.IDatabaseInitializer<TContext>

Version introducerad: EF6.0.0

Objektet returneras: En databasinitierare för den angivna kontexttypen

Nyckel: Används inte; kommer att vara null

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

Version introducerad: EF6.0.0

Objektet returnerades: En fabrik för att skapa en SQL-generator som kan användas för migreringar och andra åtgärder som gör att en databas skapas, till exempel databasskapande med databasinitierare.

Nyckel: En sträng som innehåller ADO.NET providerns invarianta namn som anger vilken typ av databas som SQL ska genereras för. SQL Server SQL-generatorn returneras till exempel för nyckeln "System.Data.SqlClient".

Anmärkning

Mer information om leverantörsrelaterade tjänster i EF6 finns i avsnittet EF6-providermodell .

System.Data.Entity.Core.Common.DbProviderServices

Version introducerad: EF6.0.0

Objektet returneras: EF-leverantören som ska användas för ett givet leverantörs invariantnamn

Nyckel: En sträng som innehåller ADO.NET providerns invarianta namn som anger vilken typ av databas som en provider behövs för. SQL Server-providern returneras till exempel för nyckeln "System.Data.SqlClient".

Anmärkning

Mer information om leverantörsrelaterade tjänster i EF6 finns i avsnittet EF6-providermodell .

System.Data.Entity.Infrastructure.IDbConnectionFactory

Version introducerad: EF6.0.0

Objekt returneras: Anslutningsmodulen som ska användas när EF skapar en databasanslutning enligt standard. När ingen anslutning eller anslutningssträng anges för EF, och ingen anslutningssträng kan hittas i app.config eller web.config, används den här tjänsten för att skapa en anslutning via konvention. Om du ändrar anslutningsfabriken kan EF använda en annan typ av databas (till exempel SQL Server Compact Edition) som standard. Lagra aldrig lösenord eller andra känsliga data i konfigurationsproviderns kod eller i konfigurationsfiler för oformaterad text. Ange hemligheter utanför projektet så att de inte av misstag kan checkas in på en källkodslagringsplats. Överväg att skydda innehållet i konfigurationsfilen med skyddad konfiguration.

Nyckel: Används inte; kommer att vara null

Anmärkning

Mer information om leverantörsrelaterade tjänster i EF6 finns i avsnittet EF6-providermodell .

System.Data.Entity.Infrastructure.IManifestTokenService

Version introducerad: EF6.0.0

Objektet returneras: En tjänst som kan generera en providermanifesttoken från en anslutning. Den här tjänsten används vanligtvis på två sätt. Först kan den användas för att undvika att Code First ansluter till databasen när du skapar en modell. För det andra kan det användas för att tvinga Code First att skapa en modell för en specifik databasversion, till exempel för att tvinga fram en modell för SQL Server 2005 även om SQL Server 2008 ibland används.

Objektlivslängd: Singleton – samma objekt kan användas flera gånger och samtidigt av olika trådar

Nyckel: Används inte; kommer att vara null

System.Data.Entity.Infrastructure.IDbProviderFactoryService

Version introducerad: EF6.0.0

Objekt returnerat: En tjänst som kan hämta en leverantörsfabrik från en given anslutning. På .NET 4.5 är providern offentligt tillgänglig från anslutningen. På .NET 4 använder standardimplementeringen av den här tjänsten vissa heuristiker för att hitta matchande provider. Om dessa misslyckas kan en ny implementering av den här tjänsten registreras för att tillhandahålla en lämplig lösning.

Nyckel: Används inte; kommer att vara null

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

Version introducerad: EF6.0.0

Objektet returneras: En fabrik som genererar en modellcachenyckel för en viss kontext. Som standard cachelagrar EF en modell per DbContext-typ per provider. En annan implementering av den här tjänsten kan användas för att lägga till annan information, till exempel schemanamn, i cachenyckeln.

Nyckel: Används inte; kommer att vara null

System.Data.Entity.Spatial.DbSpatialServices

Version introducerad: EF6.0.0

Objekt returneras: En rumslig EF-leverantör som lägger till stöd för den grundläggande EF-leverantören för spatialtyperna geografi och geometri.

Nyckel: DbSpatialServices efterfrågas på två sätt. Först begärs providerspecifika rumsliga tjänster med hjälp av ett DbProviderInfo-objekt (som innehåller invariant namn och manifesttoken) som nyckel. För det andra kan DbSpatialServices efterfrågas utan nyckel. Detta används för att lösa den "globala rumsliga providern" som används när man skapar fristående DbGeography- eller DbGeometry-typer.

Anmärkning

Mer information om leverantörsrelaterade tjänster i EF6 finns i avsnittet EF6-providermodell .

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

Version introducerad: EF6.0.0

Objektet returneras: En fabrik för att skapa en tjänst som gör att en provider kan implementera återförsök eller annat beteende när frågor och kommandon körs mot databasen. Om ingen implementering tillhandahålls kör EF bara kommandona och sprider eventuella undantag som genereras. För SQL Server används den här tjänsten för att tillhandahålla en återförsöksprincip som är särskilt användbar när du kör mot molnbaserade databasservrar som SQL Azure.

Nyckel: Ett ExecutionStrategyKey-objekt som innehåller providerns invarianta namn och eventuellt ett servernamn som körningsstrategin ska användas för.

Anmärkning

Mer information om leverantörsrelaterade tjänster i EF6 finns i avsnittet EF6-providermodell .

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

Version introducerad: EF6.0.0

Objektet returneras: En fabrik som gör att en provider kan konfigurera mappningen av HistoryContext till tabellen __MigrationHistory som används av EF-migreringar. HistoryContext är en Code First DbContext och kan konfigureras med hjälp av det normala FLUENT-API:et för att ändra saker som namnet på tabellen och specifikationerna för kolumnmappning.

Nyckel: Används inte; kommer att vara null

Anmärkning

Mer information om leverantörsrelaterade tjänster i EF6 finns i avsnittet EF6-providermodell .

System.Data.Common.DbProviderFactory

Version introducerad: EF6.0.0

Objekt returnerat: den ADO.NET-leverantör som ska användas för ett givet leverantörs invarianter namn.

Nyckel: En sträng som innehåller ADO.NET providerns invarianta namn

Anmärkning

Den här tjänsten ändras vanligtvis inte direkt eftersom standardimplementeringen använder den normala ADO.NET providerregistreringen. Mer information om leverantörsrelaterade tjänster i EF6 finns i avsnittet EF6-providermodell .

System.Data.Entity.Infrastructure.IProviderInvariantName

Version introducerad: EF6.0.0

Objektet returneras: en tjänst som används för att fastställa en leverantörs invarianta namn för en given typ av DbProviderFactory. Standardimplementeringen av den här tjänsten använder ADO.NET providerregistrering. Det innebär att om den ADO.NET providern inte är registrerad på det normala sättet eftersom DbProviderFactory löses av EF, så är det också nödvändigt att lösa den här tjänsten.

Nyckel: DbProviderFactory-instansen där ett invariant namn krävs.

Anmärkning

Mer information om leverantörsrelaterade tjänster i EF6 finns i avsnittet EF6-providermodell .

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

Version introducerad: EF6.0.0

Objektet returnerades: en cache med de sammansättningar som innehåller förgenererade vyer. En ersättning används vanligtvis för att låta EF veta vilka assemblyn som innehåller förgenererade vyer utan att utföra någon upptäckt.

Nyckel: Används inte; kommer att vara null

System.Data.Entity.Infrastructure.Pluralization.IPluralizationService

Version introducerad: EF6.0.0

Objektet returnerat: en tjänst som används av EF för pluralisering och singularisering av namn. Som standard används en engelsk pluraliseringstjänst.

Nyckel: Används inte; kommer att vara null

System.Data.Entity.Infrastructure.Interception.IDbInterceptor

Version introducerad: EF6.0.0

Objekt som returneras: Alla interceptorer som ska registreras när programmet startas. Observera att dessa objekt begärs med hjälp av GetServices-anropet och att alla interceptorer som returneras av någon beroendelösare registreras.

Nyckel: Används inte; kommer att vara null.

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

Version introducerad: EF6.0.0

Objektet returneras: En fabrik som används för att skapa en databasloggformaterare, vilken ska användas när egenskapen context.Database.Log anges i den angivna kontexten.

Nyckel: Används inte; kommer att vara null.

Func<System.Data.Entity.DbContext>

Version introducerad: EF6.1.0

Objektet returneras: En fabrik som ska användas för att skapa kontextinstanser för migreringar när kontexten inte har någon tillgänglig parameterlös konstruktor.

Nyckel: Typobjektet för den typ av den härledda DbContext som en fabrik behövs för.

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

Version introducerad: EF6.1.0

Objektet returneras: En fabrik som ska användas för att skapa serialiserare för serialisering av starkt skrivna anpassade anteckningar så att de kan serialiseras och deserialiseras till XML för användning i Code First Migrations.

Nyckel: Namnet på anteckningen som serialiseras eller deserialiseras.

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

Version introducerad: EF6.1.0

Returnerat objekt: En fabrik som ska användas för att skapa hanterare för transaktioner så att särskild hantering kan tillämpas för eventualiteter som hantering av kommitteringsfel.

Nyckel: Ett ExecutionStrategyKey-objekt som innehåller providerns invarianta namn och eventuellt ett servernamn som transaktionshanteraren ska användas för.