Mam projekt Entity Framework zawierający 5 oddzielnych tabel. Kiedy wyszukuję dane z tych tabel i używam .Include()
, generowane przez nie zapytanie jest bardzo wolne i przekracza limit czasu.Zmieniam moje zapytanie EF linq do procedury przechowywanej. Czy istnieje prosty sposób na skonfigurowanie złożonych mapowań?
Przenieśliłem zapytanie do procedury przechowywanej, a teraz szukam sposobu na wysłanie zapytania do tej procedury przechowywanej i łatwo odwzorowuję dane, które zwraca do istniejących klas danych.
Mój oryginalny LINQ kwerendy do EF DataContext wyglądał następująco:
var data = (from a in context.A
.Include("B")
.Include("C")
.Include("D")
.Include("E")
where a.Id == someValue
select a);
ona zwrócić obiekt danych Entity że przypominało to:
class A
{
int Id;
string otherProperties;
List<B> B;
List<C> C;
List<D> D;
List<E> E;
}
Kwerenda że EF generowane do uruchomienia na serwerze SQL zwrócony zestaw wyników, który wygląda mniej więcej tak:
C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 ---------------------------------------------------------- A1 A2 B1 B2 A1 A2 C1 C2 A1 A2 C1 C2 A1 A2 C1 C2 A1 A2 D1 D2 A1 A2 D1 D2 A1 A2 D1 D2 A1 A2 E1 E2 A1 A2 E1 E2
(Zakłada Nagrywanie 1 B, 3 C, 3 D i 2 E.
Powtórzyłem to zapytanie w procedurze przechowywanej i zredukowałem jego środowisko wykonawcze praktycznie do zera, jednak utknąłem przy próbach wymyślenia sposobu odwzorowania zestawu wyników na moją klasę danych Entity Framework (klasa A
od góry).
EF jest w stanie to zrobić, ponieważ robi to gdzieś za kulisami, kiedy używam kwerendy Linq, ale nie jestem pewien, czy to jest coś, do czego miałbym dostęp.
Czy istnieje prosty sposób w Entity Framework do mapowania pojedynczej procedury składowanej (Import funkcji) do wielopoziomowej klasy Entity Framework?
To był mój plan awaryjny, jeśli nie ma łatwej alternatywy wbudowanej w EF. Na każdej klasie jest wiele właściwości, więc będzie dużo pisania w celu zakodowania konwertera. – Rachel