Wie bekomme ich bei einer gespeicherten Prozedur im Entity Framework die Navigationseigenschaften der Entität?

.net c# entity entity-framework

Frage

Das Entity-Framework ist langsam, also habe ich versucht, eine gespeicherte Prozedur zu verwenden.

Mit Entity Framework können Sie eine gespeicherte Prozedur definieren, die eine Entität erzeugt. Meine Entität verfügt jedoch über 'Navigationseigenschaften', die bei Verwendung dieser Methode nicht aufgefüllt werden.

Gibt es eine Arbeit in der Umgebung?

Akzeptierte Antwort

Gut gespeicherte Prozeduren können nicht zusammengestellt werden. Es gibt also keine Möglichkeit, Ihren SPROC aufzurufen und die EF automatisch Beziehungen in derselben Abfrage aufzufüllen, indem Sie Include () oder etwas anderes verwenden.

Sagen Sie also, Sie haben Produkte und Kategorien

und Sie haben einen Sproc um Produkte zu bekommen:

dh

var products = context.GetProducts(someproductfilter);

Die resultierenden Produkte werden nicht geladen.

Wenn Sie jedoch eine zweite gespeicherte Prozedur haben, die die Kategorien für die genannten Produkte abruft:

dh

var categories = context.GetCategoriesForProducts(someproductfilter);

Ein Feature in EF namens Relationship Fixup, das verknüpfte Entitäten verknüpft, sobald die zweite Entität in den Kontext eintritt, stellt sicher, dass nach dem Aufruf beider Aufrufe jedes Produkt in Produkten eine nicht-null-Kategorie hat.

Dies ist nicht ideal, da Sie mehr als eine Abfrage ausführen, aber es funktioniert.

Eine Alternative ist die Verwendung von EFExtensions . Der Typ, der das geschrieben hat, hat die Fähigkeit geschaffen, Sprocs zu schreiben, die mehr Daten auf einmal laden.

Hoffe das hilft

Prost Alex


Beliebte Antwort

Ich habe diese SO-Frage gefunden, als ich mit EF nach Stored Procedures (SPs) recherchierte. Ich sehe auch Leute wie @KristianNissen und @Todilo, die gefragt haben, ob es ein Update mit EF6 gibt.

Die Antwort ist ja, EF 6 hat Dinge geändert, aber es wurde nichts hinzugefügt, um das Laden von Navigationseigenschaften zu erleichtern, wenn SPs verwendet werden. Sie können auch nicht die .Include () - Methode mit SPs verwenden, wie in dieser SO-Frage gestellt wurde .

Die einzige Möglichkeit ist, Ihren SP zu schreiben, um die Navigationseigenschaften speziell zu laden. Es gibt jedoch jetzt eine gute Microsoft-Dokumentation zur Verwendung von SPs - siehe Query SP und SP, die mehrere Ergebnissätze zurückgeben .

Der Vollständigkeit halber bestand die von EF in Version 6 eingeführte Änderung darin, dass gespeicherte Prozeduren (SPs) Einfügungen, Aktualisierungen und Löschvorgänge durchführen sollten - siehe Microsoft-Artikel und Entity Framework Tutotial .



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum