2015-04-12 4 views
8

Entity Framework cotext DbContext hat Konstruktor, der DbConnection übernimmt. Warum nicht IDbConnection?Wie IDbConnection zu EF Kontext übergeben?

Ist es normalerweise DbConnection EF Kontext zu übergeben, anstatt Standard-Konstruktor verwenden (die Verbindungszeichenfolge von App.config liest?)

Antwort

4

Entity Framework cotext DbContext Konstruktor hat die DbConnection nimmt. Warum nicht IDbConnection?

Da ich nicht Teil des EF-Teams bin, kann ich nichts in ihrem Namen sagen. Es scheint mir wie DbConnection, da eine abstrakte Basis bereits einige der Implementierungen für Sie gemacht hat, so dass Sie jede überschriebene Klasse Dinge "kostenlos" bekommt.

Ich habe eine anständige Antwort here gefunden:

Einer der wichtigsten Vorteile hat mit Versionierung zu tun. Wenn Microsoft den Anbietern neue Funktionen hinzufügt, müssen sie diese Funktionalität dem Entwickler zur Verfügung stellen.

Mit der alten Schnittstelle nur Ansatz, müssten sie die Schnittstelle ändern (aber sie würden nicht, weil Schnittstellen unveränderlich sind) und alle Klasse die Schnittstelle im Framework implementieren. Alle benutzerdefinierten Klassen, die von Entwicklern geschrieben wurden, die die Schnittstelle implementieren, müssten ebenfalls geändert werden, um Änderungen an der Schnittstelle zu implementieren. Wenn sie weiterhin neue Funktionen hinzufügen (was sie tun werden), wird dies zu einem Teufelskreis, in dem Schnittstellen geändert oder neue implementiert werden müssen, um neue Funktionen anzubieten.


Ist es normalerweise DbConnection EF Kontext zu übergeben, anstatt Standardkonstruktors zu verwenden?

Die docs sind ziemlich klar, warum Sie diese Überladung verwenden würde: die bestehende Verbindung

Konstruiert eine neue Kontext-Instanz mit mit einer Datenbank zu verbinden. Die Verbindung wird nicht entfernt, wenn der Kontext entsorgt wird, wenn contextOwnsConnection den Wert false hat.

Wenn Sie bereits einen offenen Kontext haben und dies weitergeben möchten, können Sie dies tun. "Ist es normal" wird für jeden Anwendungsfall variieren. Ich selbst habe diese Überlastung überhaupt nicht benutzt.

Verwandte Themen