2008-12-16 7 views
6

Utworzono import funkcji, który zwraca wyniki zapisanego postępowania jako jedną z moich encji. jednak nie mogę przechodzić przez moje właściwości nawigacyjne, aby uzyskać dostęp do danych w innych jednostkach. Wiem, że możesz użyć include() dla obiektów ObjectQueries, ale nie możesz znaleźć niczego, co zmusi EF do załadowania moich relacji dla wyników funkcji importu funkcji.Import funkcji modułu obiektu, nie można wczytać relacji dla funkcji zwracających typy jednostek

Jakieś pomysły?

Z góry dziękuję.

+0

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

Odpowiedz

5

Nie jest to możliwe w EF 1.0

Powodem jest to, że EF rozważy wartości procedura składowana ma być tylko wartości i nie properites nawigacyjne.

Na przykład pracownik ma wiele podmiotów zamówienia. W zamówieniu masz właściwość o nazwie EmployeeID. Gdy baza danych wypełnia zapytanie za pomocą instrukcji include, tworzy 1 zapytanie projekcyjne w SQL, aby wypełnić wszystkie dane zamówienia, które może posiadać dany pracownik.

Więc gdybym powiedział

var pracownik = context.Employees.Include ("Zamówienia") Gdzie (e => e.ID == 1) .First (.);

var orders = employee.Orders;

SQL dla pierwszego zapytania stworzy zapytania występ, który będzie zawierał rozkazy gdzie IDPracownika = 1.

Teraz, gdy procedura przechowywana działa, może to zrobić każdy kod za kulisami (w otherwords może powrócić dowolny zestaw danych). Więc kiedy SQL uruchamia procedurę przechowywaną, po prostu uruchamia kod w tej procedurze przechowywanej i nie ma żadnej wiedzy, że ID pracownika na zamówienie jest FK do tej właściwości. Dodatkowo, jeśli twoja procedura składowana zwraca podmiot pracowniczy, to patrzysz na inny scenariusz, w którym nie będziesz nawet miał identyfikatora zamówienia do wykonania.

Aby obejść ten problem, można skonfigurować zapytanie w EF za pomocą instrukcji Include, które mogą odzwierciedlać dowolną procedurę przechowywaną. Jeśli użyjesz odpowiedniej kombinacji instrukcji. Wybierz i .Include, powinieneś móc zrobić to samo.