2008-12-16 8 views
6

Ich habe einen Funktionsimport erstellt, der die Ergebnisse einer gespeicherten Prozedur als eine meiner Entitäten zurückgibt. Allerdings kann ich meine durchgehenden Navigationseigenschaften nicht durchqueren, um auf die Daten in anderen Entitäten zuzugreifen. Ich weiß, dass Sie include() für objectQueries verwenden können, aber nichts finden können, das die EF zwingt, meine Beziehungen für Entity-Ergebnisse von Funktionsimporten zu laden.Entitätsframeworkfunktionsimport, kann keine Relationen für Funktionen laden, die Entitätstypen zurückgeben

Irgendwelche Ideen ??

Vielen Dank im Voraus.

+0

ein Duplikat von http://stackoverflow.com/questions/1035677/using-a-stored-procedure-in-entity-framework-how-do-i-get-the-the-entity-to-have – user48545

Antwort

5

Dies ist nicht möglich in EF 1.0

Der Grund dafür ist, dass EF gespeicherte Prozedur Werte berücksichtigen werden nur Werte und nicht die Navigation properites sein.

Zum Beispiel hat die Entität Employee mehrere Order-Entitäten. In Reihenfolge haben Sie eine Eigenschaft namens EmployeeID. Wenn die Datenbank Ihre Abfrage mit Include-Anweisungen füllt, erstellt sie eine Projektionsabfrage in SQL, um alle Auftragsdaten zu füllen, die ein bestimmter Mitarbeiter haben könnte.

Also, wenn ich sagte

var Mitarbeiter = context.Employees.Include ("Orders") Wo (e => e.ID == 1) .First().

var Bestellungen = Mitarbeiter.Orders;

Die SQL für die erste Abfrage wird eine Projektions Abfrage erstellen, die Befehle enthalten, wo die EmployeeID = 1.

Nun, wenn Sie Ihre gespeicherte Prozedur ausgeführt wird, das hinter den Kulissen beliebigen Code tun können (in anderen Worten kann es zurückgeben jede Menge von Daten). Wenn SQL also die gespeicherte Prozedur ausführt, wird nur der Code in dieser gespeicherten Prozedur ausgeführt, und es ist nicht bekannt, dass EmployeeID für Order ein FK für diese Eigenschaft ist. Wenn Ihre gespeicherte Prozedur eine Employee-Entität zurückgibt, sehen Sie außerdem ein anderes Szenario, in dem Sie nicht einmal eine OrderID verfolgen müssen.

Um dies jedoch zu umgehen, können Sie Ihre Abfrage in EF mithilfe von Include-Anweisungen einrichten, die gespeicherte Prozeduren spiegeln können. Wenn Sie die richtige Mischung aus .Select- und .Include-Anweisungen verwenden, sollten Sie dasselbe tun können.

Verwandte Themen