3

는 그래서 DB에서 내 팀 테이블 레코드를 포함Entity Framework 코드 첫 번째 일대 다 많은 잘못된 쿼리를 수행합니까?

public class Player 
{ 
    public int PlayerId { get; set; } 

    [Required] 
    public string Name2 { get; set; } 

    public string Cv { get; set; } 

    public int TeamId { get; set; } 
    public virtual Team Team { get; set; } 
} 



public class Team 
{ 
    public int TeamId { get; set; } 
    [Required] 
    public string Name { get; set; } 
    public string City { get; set; } 
    public DateTime Founded { get; set; } 

    public virtual IList<Player> Players { get; set; } 
} 

는, DB 내 선수 테이블이 어떤 (빈)을 포함하지 않는 모델을 가지고있다. 나는이 쿼리를 실행하면

는 :

 IQueryable<Player> query = playerRepository.All.Include(p => p.Team); 

     return View((query); 

을 나는 DB에서 (프로파일 러를 통해)이 쿼리를 얻을 : 결과로 나는 하나 개의 빈 행을 얻을

SELECT 
[Project1].[TeamId] AS [TeamId], 
[Project1].[Name] AS [Name], 
[Project1].[City] AS [City], 
[Project1].[Founded] AS [Founded], 
[Project1].[C1] AS [C1], 
[Project1].[PlayerId] AS [PlayerId], 
[Project1].[Name2] AS [Name2], 
[Project1].[Cv] AS [Cv], 
[Project1].[TeamId1] AS [TeamId1] 
FROM ( SELECT 
      [Limit1].[TeamId] AS [TeamId], 
      [Limit1].[Name] AS [Name], 
      [Limit1].[City] AS [City], 
      [Limit1].[Founded] AS [Founded], 
      [Extent2].[PlayerId] AS [PlayerId], 
      [Extent2].[Name2] AS [Name2], 
      [Extent2].[Cv] AS [Cv], 
      [Extent2].[TeamId] AS [TeamId1], 
      CASE WHEN ([Extent2].[PlayerId] IS NULL) THEN CAST(NULL AS int) 
        ELSE 1 
      END AS [C1] 
     FROM ( SELECT TOP (10) [c].[TeamId] AS [TeamId], 
            [c].[Name] AS [Name], 
            [c].[City] AS [City], 
            [c].[Founded] AS [Founded] 
         /* HERE */  
         FROM [dbo].[Teams] AS [c] 
       ) AS [Limit1] 
     /* AND HERE */ 
     LEFT OUTER JOIN [dbo].[Players] AS [Extent2] 
     ON    [Limit1].[TeamId] = [Extent2].[TeamId] 
) AS [Project1] 
ORDER BY [Project1].[TeamId] ASC, [Project1].[C1] ASC 

화면에 표시. 이것은 조인이 잘못된 순서로 진행되기 때문입니다 ... 플레이어 팀에 합류하는 대신 팀에 플레이어가 생깁니다 ... DB에 플레이어가 없더라도 차례대로 비어있는 행을 가져옵니다. 그리드.

누구나 어떤 아이디어가 있습니까 ???

블라 당신은 뭔가 잘못하고 있어야합니다 또는 잘못된 쿼리보고있다

+0

TOP (10)은 어디에서 왔습니까? 저장소 뒤에 무엇이 숨겨져 있습니까? –

+0

논리 없음 ... 여기에 메서드가 있습니다 : public IQueryable 모두 { get {return context.Players; } } –

답변

3

은. 나는 당신의 엔티티 및 LINQ 쿼리 사용 :

var data = context.Players.Include(p => p.Team).ToList(); 

을하고 나는이 SQL 쿼리를 얻을 :

SELECT 
[Extent1].[PlayerId] AS [PlayerId], 
[Extent1].[Name2] AS [Name2], 
[Extent1].[Cv] AS [Cv], 
[Extent1].[TeamId] AS [TeamId], 
[Extent2].[TeamId] AS [TeamId1], 
[Extent2].[Name] AS [Name], 
[Extent2].[City] AS [City], 
[Extent2].[Founded] AS [Founded] 
FROM [dbo].[Players] AS [Extent1] 
INNER JOIN [dbo].[Teams] AS [Extent2] ON [Extent1].[TeamId] = [Extent2].[TeamId] 

을하지만이 쿼리를 사용하는 경우 :

var data = context.Teams.Include(t => t.Players).Take(10).ToList(); 

내가 정확히 SQL을 얻을 것이다 질문. TOP (10) 및 역 표 조회가 이유없이 표시되지 않습니다.

관련 문제