2013-07-19 9 views
8

Mam tabeli o nazwie PersonTable z kolumnami: PersonId, RestarauntId, AgeDlaczego struktura encji tworzy podzapytanie podczas wybierania z widoku?

mam pogląd zwany PersonView że robi:

select PersonId, 
     RestarauntId, 
     RestarauntName(RestarauntId) as `RestarauntName`, 
     Age 
FROM PersonTable 

Kiedy robię coś tak prostego jak:

var persons = context.PersonView.Where(x=>x.PersonId == 1) 
           .Select(x=> 
            new {x.PersonId, 
             x.RestarauntId, 
             x.RestarauntName, 
             x.Age }); 

powyższych zwraca 1 rekord i oczekuję zapytania MySql:

SELECT PersonId, RestarauntId, RestarauntName, Age 
FROM PersonView 
WHERE PersonId = 1 

ale zamiast tego, generuje następujące:

SELECT 1 AS `C1`, T.PersonId, T.RestarauntId, T.RestarauntName, T.Age 
FROM 
(SELECT PersonId, RestarauntId, RestarauntName, Age 
FROM PersonView) AS T 
WHERE T.PersonId = 1 

Więc to nie ma znaczenia, co ja przechodzę do klauzuli WHERE, to zawsze dostanie wszystkie rekordy pierwszy w sub-select. Dzieje się tak tylko wtedy, gdy pytam o widok, który potrzebuję, ale byłem ciekawy, dlaczego tworzy powyższe zapytanie zamiast tego, którego oczekuję. Czy jest to kwestia Entity Framework lub problem MySql?

+0

Czy MySQL nie jest w stanie zoptymalizować obu zapytań do tego samego planu? Może różnica nie ma znaczenia w czasie wykonywania. – usr

+2

http://stackoverflow.com/questions/12690775/why-ef-generating-a-sub-query-for-a-simle-query –

+1

Nie wiem, czy to pomaga, ale EF nie użyje kluczowych informacji w widokach, aby określić typy łączenia. Wybiera tylko przy użyciu wewnętrznego sprzężenia w tabelach, nigdy w widokach. – Brannon

Odpowiedz

1

MySql View nie zezwala na filtry dynamiczne w używanym zapytaniu.
Do tego celu użyto kilka hacków. Ale z założenia widoki mysql nie mają charakteru dynamicznego. Widoki zawsze wykonują rzeczywistą kwerendę dostarczoną i tylko na tym wyniku, można dalej filtrować, jak wspomniano w twoim przykładzie. Aby uzyskać więcej informacji, odwiedź: Here

Powiązane problemy