Rozwiązywanie zależności

Uwaga

EF6 i nowsze — Funkcje, interfejsy API itp. omówione na tej stronie zostały wprowadzone w Entity Framework 6. Jeśli korzystasz ze starszej wersji, niektóre lub wszystkie podane informacje nie mają zastosowania.

Począwszy od platformy EF6, platforma Entity Framework zawiera mechanizm ogólnego przeznaczenia do uzyskiwania implementacji usług, których wymaga. Oznacza to, że gdy EF używa wystąpienia niektórych interfejsów lub klas bazowych, wymaga konkretnej implementacji interfejsu lub klasy bazowej do użycia. Można to osiągnąć za pomocą interfejsu IDbDependencyResolver:

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

Metoda GetService jest zwykle wywoływana przez EF i jest obsługiwana przez implementację IDbDependencyResolver dostarczoną przez EF lub przez aplikację. Po wywołaniu argument typu jest interfejsem lub typem klasy bazowej żądanej usługi, a obiekt klucza ma wartość null lub obiekt dostarczający kontekstowe informacje o żądanej usłudze.

O ile nie określono inaczej, zwracany obiekt musi być bezpieczny wątkowo, ponieważ może być używany jako pojedynczy obiekt. W wielu przypadkach zwrócony obiekt jest fabryką, która sama musi być bezpieczna wątkowo, ale obiekt zwrócony przez fabrykę nie musi być bezpieczny wątkowo, ponieważ do każdego użycia jest tworzony nowy egzemplarz przez fabrykę.

Ten artykuł nie zawiera pełnych szczegółów dotyczących implementacji IDbDependencyResolver, ale służy jako odniesienie do rodzajów usług (czyli interfejsu i klas bazowych), dla których EF wywołuje metodę GetService oraz do semantyki kluczowego obiektu dla każdego z tych wywołań.

System.Data.Entity.IDatabaseInitializer<TContext>

Wprowadzona wersja: EF6.0.0

Zwrócony obiekt: inicjator bazy danych dla danego typu kontekstu

Klucz: Nie jest używany; będzie mieć wartość null

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

Wprowadzona wersja: EF6.0.0

Zwrócony obiekt: fabryka do tworzenia generatora SQL, który może być używany do migracji i innych działań, które powodują utworzenie bazy danych, takich jak inicjowanie bazy danych przy użyciu inicjatorów baz danych.

Klucz: ciąg zawierający niezmienną nazwę dostawcy ADO.NET określającą typ bazy danych, dla której zostanie wygenerowany program SQL. Na przykład generator SQL programu SQL Server jest zwracany dla klucza "System.Data.SqlClient".

Uwaga

Aby uzyskać więcej informacji na temat usług związanych z dostawcą w programie EF6, zobacz sekcję Model dostawcy EF6.

System.Data.Entity.Core.Common.DbProviderServices

Wprowadzona wersja: EF6.0.0

Zwrócony obiekt: dostawca EF do użycia dla danej niezmiennej nazwy dostawcy

Klucz: ciąg zawierający niezmienną nazwę dostawcy ADO.NET określającą typ bazy danych, dla której jest wymagany dostawca. Na przykład dostawca programu SQL Server jest zwracany dla klucza "System.Data.SqlClient".

Uwaga

Aby uzyskać więcej informacji na temat usług związanych z dostawcą w programie EF6, zobacz sekcję Model dostawcy EF6.

System.Data.Entity.Infrastructure.IDbConnectionFactory

Wprowadzona wersja: EF6.0.0

Zwrócony obiekt: fabryka połączeń, która zostanie użyta przez EF przy tworzeniu połączenia z bazą danych zgodnie z konwencją. Oznacza to, że w przypadku braku połączenia lub ciągu połączenia dla EF i braku możliwości znalezienia ciągu połączenia w elemencie app.config lub web.config, ta usługa jest używana do tworzenia połączenia zgodnie z konwencją. Zmiana fabryki połączeń umożliwia programowi EF używanie domyślnie innego typu bazy danych (na przykład PROGRAMU SQL Server Compact Edition). Nigdy nie przechowuj haseł ani innych poufnych danych w kodzie dostawcy konfiguracji ani w plikach konfiguracji w postaci zwykłego tekstu. Określaj tajne informacje poza projektem, aby nie mogły zostać przypadkowo zatwierdzone w repozytorium kodu źródłowego. Rozważ ochronę zawartości pliku konfiguracji przy użyciu chronionej konfiguracji.

Klucz: Nie jest używany; będzie mieć wartość null

Uwaga

Aby uzyskać więcej informacji na temat usług związanych z dostawcą w programie EF6, zobacz sekcję Model dostawcy EF6.

System.Data.Entity.Infrastructure.IManifestTokenService

Wprowadzona wersja: EF6.0.0

Obiekt zwrócony: usługa, która może wygenerować token manifestu dostawcy na podstawie połączenia. Ta usługa jest zwykle używana na dwa sposoby. Najpierw można go użyć, aby uniknąć połączenia Code First z bazą danych podczas tworzenia modelu. Po drugie, można go użyć, aby wymusić utworzenie modelu dla określonej wersji bazy danych — na przykład wymusić model dla serwera SQL Server 2005, nawet jeśli czasami używany jest serwer SQL Server 2008.

Okres istnienia obiektu: Singleton — ten sam obiekt może być używany wiele razy i współbieżnie przez różne wątki

Klucz: Nie jest używany; będzie mieć wartość null

System.Data.Entity.Infrastructure.IDbProviderFactoryService

Wprowadzona wersja: EF6.0.0

Zwrócony obiekt: usługa, która może uzyskać fabrykę dostawcy z danego połączenia. Na platformie .NET 4.5 dostawca jest publicznie dostępny z połączenia. Na platformie .NET 4 domyślna implementacja tej usługi używa niektórych heurystyki do znalezienia zgodnego dostawcy. Jeśli te środki zawiodą, można zarejestrować nową implementację tej usługi, aby zapewnić właściwe rozwiązanie.

Klucz: Nie jest używany; będzie mieć wartość null

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

Wprowadzona wersja: EF6.0.0

Obiekt zwrócony: mechanizm, który wygeneruje klucz pamięci podręcznej modelu dla danego kontekstu. Domyślnie EF buforuje jeden model na typ DbContext dla każdego dostawcy bazy danych. Inną implementacją tej usługi można użyć do dodawania innych informacji, takich jak nazwa schematu, do klucza pamięci podręcznej.

Klucz: Nie jest używany; będzie mieć wartość null

System.Data.Entity.Spatial.DbSpatialServices

Wprowadzona wersja: EF6.0.0

Obiekt zwrócony: przestrzenny dostawca EF, który rozszerza obsługę podstawowego dostawcy EF o typy przestrzenne geograficzne i geometryczne.

Klucz: DbSpatialServices można wywołać w dwojaki sposób. Najpierw wymagane są usługi przestrzenne specyficzne dla dostawcy przy użyciu obiektu DbProviderInfo (który zawiera niezmienną nazwę i token manifestu) jako klucz. Po drugie, można uzyskać dbSpatialServices bez klucza. Służy do rozpoznawania "globalnego dostawcy przestrzennego", który jest używany podczas tworzenia autonomicznych typów DbGeography lub DbGeometry.

Uwaga

Aby uzyskać więcej informacji na temat usług związanych z dostawcą w programie EF6, zobacz sekcję Model dostawcy EF6.

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

Wprowadzona wersja: EF6.0.0

Obiekt zwrócony: fabryka do tworzenia usługi, która pozwala dostawcy implementować ponowne próby lub inne zachowania podczas wykonywania zapytań i poleceń względem bazy danych. Jeśli implementacja nie zostanie podana, program EF po prostu wykona polecenia i rozpropaguje zgłoszone wyjątki. W przypadku programu SQL Server ta usługa służy do udostępniania zasad ponawiania, które są szczególnie przydatne podczas uruchamiania na serwerach baz danych opartych na chmurze, takich jak Usługi SQL Azure.

Klucz: obiekt ExecutionStrategyKey zawierający niezmienną nazwę dostawcy i opcjonalnie nazwę serwera, dla którego będzie używana strategia wykonywania.

Uwaga

Aby uzyskać więcej informacji na temat usług związanych z dostawcą w programie EF6, zobacz sekcję Model dostawcy EF6.

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

Wprowadzona wersja: EF6.0.0

Zwrócony obiekt: fabryka, która umożliwia dostawcy skonfigurowanie mapowania HistoryContext na tabelę używaną przez Ef Migrations. HistoryContext to kod First DbContext i można go skonfigurować przy użyciu normalnego płynnego interfejsu API, aby zmienić elementy, takie jak nazwa tabeli i specyfikacje mapowania kolumn.

Klucz: Nie jest używany; będzie mieć wartość null

Uwaga

Aby uzyskać więcej informacji na temat usług związanych z dostawcą w programie EF6, zobacz sekcję Model dostawcy EF6.

System.Data.Common.DbProviderFactory

Wprowadzona wersja: EF6.0.0

Zwrócony obiekt: dostawca ADO.NET do użycia dla danej niezmiennej nazwy dostawcy.

Klucz: ciąg zawierający niezmienną nazwę dostawcy ADO.NET

Uwaga

Ta usługa nie jest zwykle zmieniana bezpośrednio, ponieważ domyślna implementacja używa normalnej rejestracji dostawcy ADO.NET. Aby uzyskać więcej informacji na temat usług związanych z dostawcą w programie EF6, zobacz sekcję Model dostawcy EF6.

System.Data.Entity.Infrastructure.IProviderInvariantName

Wprowadzona wersja: EF6.0.0

Obiekt zwrócony: usługa używana do określania nazwy niezmiennej dostawcy dla danego typu DbProviderFactory. Domyślna implementacja tej usługi używa rejestracji dostawcy ADO.NET. Oznacza to, że jeśli dostawca ADO.NET nie jest zarejestrowany w standardowy sposób, ponieważ DbProviderFactory jest rozpoznawany przez Entity Framework, konieczne będzie również skonfigurowanie tej usługi.

Klucz: wystąpienie DbProviderFactory, dla którego wymagana jest niezmienna nazwa.

Uwaga

Aby uzyskać więcej informacji na temat usług związanych z dostawcą w programie EF6, zobacz sekcję Model dostawcy EF6.

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

Wprowadzona wersja: EF6.0.0

Zwrócony obiekt: bufor zestawów, które zawierają wstępnie wygenerowane widoki. Zamiennik jest zwykle używany, aby poinformować EF, które biblioteki zawierają widoki wygenerowane z góry, bez konieczności ich odnajdywania.

Klucz: Nie jest używany; będzie mieć wartość null

System.Data.Entity.Infrastructure.Pluralization.IPluralizationService

Wprowadzona wersja: EF6.0.0

Zwrócony obiekt: usługa używana przez platformę EF do mnożenia i ujednolizowania nazw. Domyślnie jest używana usługa pluralizacji języka angielskiego.

Klucz: Nie jest używany; będzie mieć wartość null

System.Data.Entity.Infrastructure.Interception.IDbInterceptor

Wprowadzona wersja: EF6.0.0

Zwrócone obiekty: wszelkie przechwytywacze, które powinny być zarejestrowane podczas uruchamiania aplikacji. Należy pamiętać, że te obiekty są żądane przy użyciu wywołania GetServices, a wszystkie interceptory zwracane przez dowolny rozwiązywacz zależności zostaną zarejestrowane.

Klucz: nie jest używany; będzie mieć wartość null.

FuncSystem.Data.Entity.DbContext, Action, System.Data.Entity.Infrastructure.Interception.DatabaseLogFormatter

Wprowadzona wersja: EF6.0.0

Zwrócony obiekt: fabryka, która zostanie użyta do stworzenia formatującego dziennik bazy danych programu, który będzie wykorzystywany, gdy właściwość Database.Log zostanie ustawiona w danym kontekście.

Klucz: nie jest używany; będzie mieć wartość null.

Func<System.Data.Entity.DbContext>

Wprowadzona wersja: EF6.1.0

Zwrócony obiekt: fabryka, która będzie używana do tworzenia wystąpień kontekstu dla migracji, gdy kontekst nie ma dostępnego konstruktora bez parametrów.

Klucz: obiekt Type dla typu pochodnego obiektu DbContext, dla którego potrzebna jest fabryka.

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

Wprowadzona wersja: EF6.1.0

Zwrócony obiekt: fabryka, która będzie używana do tworzenia serializatorów do serializacji silnie typizowanych adnotacji niestandardowych, tak aby można je było serializować i deserializować w formacie XML do użytku w ramach Code First Migrations.

Klucz: nazwa adnotacji, która jest serializowana lub deserializowana.

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

Wprowadzona wersja: EF6.1.0

Zwrócony obiekt: fabryka, która będzie używana do tworzenia obsług dla transakcji, dzięki czemu można zastosować specjalną obsługę w sytuacjach, takich jak obsługa niepowodzeń zatwierdzeń.

Klucz: obiekt ExecutionStrategyKey zawierający niezmienną nazwę dostawcy i opcjonalnie nazwę serwera, dla którego będzie używana procedura obsługi transakcji.