Freigeben über


Anbieter von Entity Framework 6

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.

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. Dies bringt viele Vorteile mit sich, erfordert jedoch auch, dass EF-Anbieter für die EF6-Assemblys neu erstellt werden. Das heißt, dass EF-Anbieter für EF5 und darunter nicht mit EF6 funktionieren, es sei denn, sie wurden neu erstellt.

Welche Anbieter sind für EF6 verfügbar?

Anbieter, von denen wir wissen, dass Sie für EF6 neu erstellt wurden:

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.

Registrieren von EF-Anbietern

Ab Entity Framework 6 können EF-Anbieter über die codebasierte Konfiguration oder die Konfigurationsdatei der Anwendung registriert werden.

Registrierung über die Konfigurationsdatei

Die Registrierung des EF-Anbieters in „app.config“ oder „web.config“ besitzt folgendes 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. 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.

Der invariante Name, „invariantName“, ist in dieser Registrierung derselbe invariante Name, der für die Identifizierung eines ADO.NET-Anbieters verwendet wird. Dieser kann als „invariant“-Attribut in einer DbProviderFactories-Registrierung und als „providerName“-Attribut in einer Verbindungszeichenfolgenregistrierung gefunden werden. Der invariante Name, der verwendet werden soll, sollte auch in der Dokumentation für den Anbieter enthalten sein. 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.

Der Typ („type“) in dieser Registrierung ist der Name mit Assemblyqualifikation des Anbietertyps, der von „System.Data.Entity.Core.Common.DbProviderServices“ abgeleitet wird. Die Zeichenfolge, die z.B. für SQL Compact verwendet werden soll, ist „System.Data.Entity.SqlServerCompact.SqlCeProviderServices, EntityFramework.SqlServerCompact“. Der Typ, der hier verwendet werden soll, sollte in der Dokumentation für den Anbieter enthalten sein.

Codebasierte Registrierung

Ab Entity Framework 6 kann die anwendungsweite Konfiguration für EF im Code angegeben werden. Ausführliche Informationen dazu finden Sie unter Entity Framework – Code-Based Configuration (Codebasierte Konfiguration von Entity Framework). 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. Ihre DbConfiguration-Klasse sollte dann den Anbieter in ihrem Konstruktor registrieren. Die DbConfiguration-Klasse sieht wie folgt aus, um beispielsweise den SQL Compact-Anbieter zu registrieren:

    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.

Was passiert, wenn der Anbieter, den ich benötige, nicht verfügbar ist?

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. Sie sollten einen Verweis zur Dokumentation für das EF6-Anbietermodell hinzufügen.

Kann ich selbst einen Anbieter schreiben?

Es ist bestimmt möglich, selbst einen EF-Anbieter zu erstellen, obwohl dies nicht als triviales Unterfangen angesehen werden sollte. Der Link oben zum EF6-Anbietermodell bietet einen guten Einstiegspunkt. 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.

Beachten Sie, dass der EF-Anbieter nicht so eng mit dem zugrunde liegenden ADO.NET-Anbieter verbunden ist, wenn Sie mit EF6 beginnen. Dadurch wird es einfacher, einen EF-Anbieter zu schreiben, da ADO.NET-Klassen nicht geschrieben oder umschlossen werden müssen.