所以我有一个模型
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; }
}
我在数据库中的 Teams 表包含记录,我在数据库中的 Players 表不包含任何(空)。
当我运行这个查询时:
IQueryable<Player> query = playerRepository.All.Include(p => p.Team);
return View((query);
我在数据库中得到这个查询(通过分析器):
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
结果我在屏幕上显示了一个空行。这是因为这个加入是按错误的顺序完成的......而不是加入球员队,我得到队队球员......这反过来意味着即使我在数据库中没有球员,我在网格。
有人知道为什么吗???
弗拉丹
最佳答案
您一定是做错了什么,或者您正在查看错误的查询。我使用了您的实体和您的 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)
和反向查表不会无缘无故出现。
关于entity-framework - Entity Framework Code First 一对多查询错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5894881/