8
나는 테이블은 열 PersonTable
를 불렀다 : PersonId, RestarauntId, Age
엔티티 프레임 워크가 뷰에서 선택할 때 하위 쿼리를 만드는 이유는 무엇입니까?
내가 가지고 PersonView
라는보기 :
select PersonId,
RestarauntId,
RestarauntName(RestarauntId) as `RestarauntName`,
Age
FROM PersonTable
을 내가 같은 간단한 수행 할 때 : 위의
var persons = context.PersonView.Where(x=>x.PersonId == 1)
.Select(x=>
new {x.PersonId,
x.RestarauntId,
x.RestarauntName,
x.Age });
을 1 레코드를 반환하고 MySql 쿼리가 다음과 같을 것으로 기대합니다.
SELECT PersonId, RestarauntId, RestarauntName, Age
FROM PersonView
WHERE PersonId = 1
대신, 그것은 다음 생성
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
그래서 내가 where 절에 전달할 중요하지 않습니다, 그것은 항상 하위 선택 먼저 모든 레코드를 얻을 것이다. 이것은 필자가 필요로하는 뷰에 대해 쿼리 할 때만 발생하지만, 내가 기대하는 쿼리 대신 위 쿼리를 생성하는 이유에 대해 궁금합니다. 이것이 Entity Framework 문제입니까? MySql 문제입니까?
을 방문하십시오. MySQL이 동일한 계획에 대해 두 쿼리를 모두 최적화 할 수 있습니까? 아마 차이점은 런타임에 중요하지 않습니다. – usr
http://stackoverflow.com/questions/12690775/why-ef-generating-a-sub-query-for-a-simle-query –
도움이 될지 모르겠지만 EF는 주요 정보를 사용하지 않습니다. 뷰를 사용하여 조인 유형을 결정합니다. 테이블의 내부 조인 만 사용하고 뷰는 사용하지 않습니다. – Brannon