Kann ich eine Navigationseigenschaft laden, indem ich sie an eine gespeicherte Prozedur in EF delegiere?

9

Ich habe folgende Kundenklasse:

%Vor%

Meine Datenbank enthält Kunden- und Auftragstabellen, aber keine Fremdschlüsselbeziehungen. Aufträge für einen Kunden werden mithilfe einer gespeicherten Prozedur abgerufen, die die Kunden-ID übernimmt und die Bestellzeilen zurückgibt. Ich kann die Datenbank nicht ändern.

Ich kann die gespeicherte Prozedur von Entity Framework aus aufrufen, aber ist es möglich, den DbContext mithilfe der fließenden API zu konfigurieren, sodass der Zugriff auf die Orders-Auflistung eines Kundenobjekts die Entitäten über einen Aufruf der gespeicherten Prozedur verzögert lädt ?

Ich verwende die neueste Version von EF.

    
dommer 20.10.2014, 14:41
quelle

1 Antwort

1

Nein, das kannst du nicht. Lazy Loading wird im Proxy-Objekt codiert, das EF erstellt (wenn möglich), es gibt keine Möglichkeit, die Art und Weise, wie Proxies generiert werden, abzufangen / zu konfigurieren.

Es ist nicht einmal möglich, die Standardleseaktion von DbSet einer gespeicherten Prozedur zuzuordnen. Es ist immer eine Abfrage. Nur erstellen, aktualisieren und löschen können gespeicherten Prozeduren zugeordnet werden .

Der Grund (glaube ich) ist, dass gespeicherte Prozeduren nicht zusammensetzbar sind. Wenn also in einer komplexen LINQ-Abfrage eine Entität einer gespeicherten Prozedur zugeordnet würde (zum Lesen), wäre es nicht möglich, die Abfrage in eine einzige SQL umzuwandeln Aussage.

    
Gert Arnold 03.07.2015 19:50
quelle