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.