Anbieter von Entity Framework 6Entity Framework 6 Providers

Hinweis

Nur EF6 und höher: Die Features, APIs usw., die auf dieser Seite erläutert werden, wurden in Entity Framework 6 eingeführt.EF6 Onwards Only - The features, APIs, etc. discussed in this page were introduced in Entity Framework 6. Wenn Sie eine frühere Version verwenden, gelten manche Informationen nicht.If you are using an earlier version, some or all of the information does not apply.

Das Entity Framework wird nun unter einer Open Source-Lizenz entwickelt, und EF6 und höher werden nicht als Teil von .NET Framework zur Verfügung gestellt.The Entity Framework is now being developed under an open-source license and EF6 and above will not be shipped as part of the .NET Framework. Dies bringt viele Vorteile mit sich, erfordert jedoch auch, dass EF-Anbieter für die EF6-Assemblys neu erstellt werden.This has many advantages but also requires that EF providers be rebuilt against the EF6 assemblies. Das heißt, dass EF-Anbieter für EF5 und darunter nicht mit EF6 funktionieren, es sei denn, sie wurden neu erstellt.This means that EF providers for EF5 and below will not work with EF6 until they have been rebuilt.

Welche Anbieter sind für EF6 verfügbar?Which providers are available for EF6?

Anbieter, von denen wir wissen, dass Sie für EF6 neu erstellt wurden:Providers we are aware of that have been rebuilt for EF6 include:

Beachten Sie, dass eine Aufnahme in die Liste keine Auskunft über die Ebene der Funktion oder Unterstützung für einen angegebenen Anbieter gibt, sondern nur darüber, dass ein Build für EF6 nun verfügbar ist.Note that inclusion in this list does not indicate the level of functionality or support for a given provider, only that a build for EF6 has been made available.

Registrieren von EF-AnbieternRegistering EF providers

Ab Entity Framework 6 können EF-Anbieter über die codebasierte Konfiguration oder die Konfigurationsdatei der Anwendung registriert werden.Starting with Entity Framework 6 EF providers can be registered using either code-based configuration or in the application’s config file.

Registrierung über die KonfigurationsdateiConfig file registration

Die Registrierung des EF-Anbieters in „app.config“ oder „web.config“ besitzt folgendes Format:Registration of the EF provider in app.config or web.config has the following format:

    <entityFramework>
       <providers>
         <provider invariantName="My.Invariant.Name" type="MyProvider.MyProviderServices, MyAssembly" />
       </providers>
    </entityFramework>

Beachten Sie, dass es oft vorkommt, dass wenn der EF-Anbieter von NuGet installiert wird, das NuGet-Paket diese Registrierung automatisch der Konfigurationsdatei hinzufügt.Note that often if the EF provider is installed from NuGet, then the NuGet package will automatically add this registration to the config file. Wenn Sie das NuGet-Paket in einem Projekt installieren, das nicht das Startprojekt Ihrer App ist, müssen Sie die Registrierung in die Konfigurationsdatei für Ihr Startprojekt kopieren.If you install the NuGet package into a project that is not the startup project for your app, then you may need to copy the registration into the config file for your startup project.

Der invariante Name, „invariantName“, ist in dieser Registrierung derselbe invariante Name, der für die Identifizierung eines ADO.NET-Anbieters verwendet wird.The “invariantName” in this registration is the same invariant name used to identify an ADO.NET provider. Dieser kann als „invariant“-Attribut in einer DbProviderFactories-Registrierung und als „providerName“-Attribut in einer Verbindungszeichenfolgenregistrierung gefunden werden.This can be found as the “invariant” attribute in a DbProviderFactories registration and as the “providerName” attribute in a connection string registration. Der invariante Name, der verwendet werden soll, sollte auch in der Dokumentation für den Anbieter enthalten sein.The invariant name to use should also be included in documentation for the provider. Beispiele für invariante Namen sind u.a. „System.Data.SqlClient“ für SQL Server und „System.Data.SqlServerCe.4.0“ für SQL Server Compact.Examples of invariant names are “System.Data.SqlClient” for SQL Server and “System.Data.SqlServerCe.4.0” for SQL Server Compact.

Der Typ („type“) in dieser Registrierung ist der Name mit Assemblyqualifikation des Anbietertyps, der von „System.Data.Entity.Core.Common.DbProviderServices“ abgeleitet wird.The “type” in this registration is the assembly-qualified name of the provider type that derives from “System.Data.Entity.Core.Common.DbProviderServices”. Die Zeichenfolge, die z.B. für SQL Compact verwendet werden soll, ist „System.Data.Entity.SqlServerCompact.SqlCeProviderServices, EntityFramework.SqlServerCompact“.For example, the string to use for SQL Compact is “System.Data.Entity.SqlServerCompact.SqlCeProviderServices, EntityFramework.SqlServerCompact”. Der Typ, der hier verwendet werden soll, sollte in der Dokumentation für den Anbieter enthalten sein.The type to use here should be included in documentation for the provider.

Codebasierte RegistrierungCode-based registration

Ab Entity Framework 6 kann die anwendungsweite Konfiguration für EF im Code angegeben werden.Starting with Entity Framework 6 application-wide configuration for EF can be specified in code. Ausführliche Informationen dazu finden Sie unter Entity Framework – Code-Based Configuration (Codebasierte Konfiguration von Entity Framework).For full details see Entity Framework Code-Based Configuration. Normalerweise wird ein EF-Anbieter, der die codebasierter Konfiguration verwendet, durch Erstellung einer neuen Klasse registriert, die von System.Data.Entity.DbConfiguration abstammt und in der gleichen Assembly platziert wird, wie Ihre DbContext-Klasse.The normal way to register an EF provider using code-based configuration is to create a new class that derives from System.Data.Entity.DbConfiguration and place it in the same assembly as your DbContext class. Ihre DbConfiguration-Klasse sollte dann den Anbieter in ihrem Konstruktor registrieren.Your DbConfiguration class should then register the provider in its constructor. Die DbConfiguration-Klasse sieht wie folgt aus, um beispielsweise den SQL Compact-Anbieter zu registrieren:For example, to register the SQL Compact provider the DbConfiguration class looks like this:

    public class MyConfiguration : DbConfiguration
    {
        public MyConfiguration()
        {
            SetProviderServices(
                SqlCeProviderServices.ProviderInvariantName,
                SqlCeProviderServices.Instance);
        }
    }

In diesem Code stellt „SqlCeProviderServices.ProviderInvariantName“ ein praktisches Feature für die Zeichenfolge des invarianten Namens des SQL Server Compact-Anbieters („System.Data.SqlServerCe.4.0“) dar, und SqlCeProviderServices.Instance gibt die Singletoninstanz des SQL Compact-EF-Anbieters zurück.In this code “SqlCeProviderServices.ProviderInvariantName” is a convenience for the SQL Server Compact provider invariant name string (“System.Data.SqlServerCe.4.0”) and SqlCeProviderServices.Instance returns the singleton instance of the SQL Compact EF provider.

Was passiert, wenn der Anbieter, den ich benötige, nicht verfügbar ist?What if the provider I need isn’t available?

Wenn der Anbieter für vorherige Version von EF verfügbar ist, wenden Sie sich an den Besitzer des Anbieters, und bitten Sie diesen, eine EF6-Version zu erstellen.If the provider is available for previous versions of EF, then we encourage you to contact the owner of the provider and ask them to create an EF6 version. Sie sollten einen Verweis zur Dokumentation für das EF6-Anbietermodell hinzufügen.You should include a reference to the documentation for the EF6 provider model.

Kann ich selbst einen Anbieter schreiben?Can I write a provider myself?

Es ist bestimmt möglich, selbst einen EF-Anbieter zu erstellen, obwohl dies nicht als triviales Unterfangen angesehen werden sollte.It is certainly possible to create an EF provider yourself although it should not be considered a trivial undertaking. Der Link oben zum EF6-Anbietermodell bietet einen guten Einstiegspunkt.The the link above about the EF6 provider model is a good place to start. Es kann auch nützlich sein, den Code für den SQL Server- und SQL CE-Anbieter, der in der Open Source-Codebasis von EF enthalten ist, als Startpunkt oder zur Referenz zu verwenden.You may also find it useful to use the code for the SQL Server and SQL CE provider included in the EF open source codebase as a starting point or for reference.

Beachten Sie, dass der EF-Anbieter nicht so eng mit dem zugrunde liegenden ADO.NET-Anbieter verbunden ist, wenn Sie mit EF6 beginnen.Note that starting with EF6 the EF provider is less tightly coupled to the underlying ADO.NET provider. Dadurch wird es einfacher, einen EF-Anbieter zu schreiben, da ADO.NET-Klassen nicht geschrieben oder umschlossen werden müssen.This makes it easier to write an EF provider without needing to write or wrap the ADO.NET classes.