Die Abstraktion von Leaking Entity Framework - nur ein bisschen

8

Was ist, wenn ich Zugriff auf eine für das RDBMS einzigartige Funktion haben möchte? Gibt es eine Möglichkeit, DB-spezifisches SQL in das von EF erzeugte SQL zu injizieren?

Beispielsweise können Sie in Oracle 12c DDL und DML zeitliche Gültigkeit hinzufügen (es gibt eine große Vielfalt; ich werde hier nur einfache Beispiele verwenden):

Dies könnte in C # schön modelliert werden:

%Vor%

Dann mit LINQ verwendet

%Vor%

Die Erweiterung .AsOfPeriodFor kann in etwa so aussehen:

%Vor%

Und ich denke, dass der DbContext über seine Entitäten reflektieren kann, um die DDL zur Initialisierungszeit zu steuern (ich muss mehr darüber erfahren).

Das Ergebnis von obigem ist, dass EF das folgende SQL ausgibt

DDL (zur Initialisierungszeit):

%Vor%

DML (zur Abfragezeit):

%Vor%

Meine Frage: Gibt es Hooks oder Interfaces, um diese RDBMS-Spezialsätze in das von EF generierte SQL einzufügen? Oder müssen die oben genannten mit einem benutzerdefinierten Oracle DB Provider heiraten? Ist diese Art von Sache möglich und kannst du mich auf ein Blog / Buch / Video / Guru hinweisen, der Anleitung geben kann?

    
biscuit314 27.10.2014, 20:42
quelle

2 Antworten

1

Nach meinem Wissen ist es nicht möglich, das SQL zu ändern, das von einem EF-Provider generiert wird.

Für diese speziellen Fälle können Sie SQL jedoch direkt ausführen.

%Vor%

Sie müssen nur sicherstellen, dass alles, was Sie zurückgeben, der Form von SomeEntity entspricht.

    
Jason Gerard 07.07.2015 14:44
quelle
0

Implementieren Sie einen Interceptor: EF-Tutorial

Sieht so aus:

%Vor%

Aber wie bekomme ich den Typ, um die Metadaten zu bekommen, die ich nicht kenne?

    
user3411327 07.07.2015 18:32
quelle