Entity Framework Element Code First-to-Many First Performs Wrong Requests?

So I have a model

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; }
}

The table of my teams in the database contains entries, the table of my players in the database does not contain (empty).

When I run this query:

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

        return View((query);

I get this request in the database (via profiler):

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

As a result, I get one blank line shown on the screen. This is due to the fact that this association is performed in the wrong order ... instead of joining Team on Players, I get "Players in teams" ... which, in turn, means that although I do not have players in the DB, I get an empty row in the grid.

Does anyone have any idea why ???

Vladan

+3
source share
1

- . 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) .

+3

All Articles