显示空类型的数据

时间:2016-12-02 16:44:57

标签: c# asp.net-mvc entity-framework dbcontext

我正在制作梦幻足球游戏,我正在使用Entity Framework来映射我的数据库。

有一个表格,其中包含所有可能的足球运动员,称为球员,一个包含称为球队的球队信息的表格,一个包含联赛信息的表格,一个表格记录哪个球员属于哪个球队(因为一个球员属于哪个球员)许多球队取决于他们所在的联赛)称为联盟球员。

然而,当我试图从团队中获得所有玩家时,我遇到了一个问题。当我从我的上下文中进行查询时,玩家显示为null,而如果我查看ID并且在数据库中,所有信息都在那里。有谁知道是什么原因造成的?我是否错误地设置了模型?

查询

    public async Task<IActionResult> getTeamPlayers(){
        // Null values
        var y = await context.Teams.Include(s => s.Players)
            .SingleOrDefaultAsync(t => t.ManagerID == manager.ManagerID);
        // Also null values 
        var z = await context.Leagues.Include(l => l.Teams)
            .ThenInclude(t => t.Players)
            .AsNoTracking()
            .ToListAsync(); 

        return Json(y);
    }

调试

enter image description here enter image description here

模特

public class Team{
    [Key]
    public int TeamID { get; set; }
    public int ManagerID { get; set; }
    public int LeagueID { get; set; }
    public string TeamName { get; set; }
    public virtual Manager Manager { get; set; }
    public virtual League League { get; set; }
    public virtual ICollection<LeaguePlayer> Players { get; set; }

}

public class Player {
    [Key]
    public int PlayerID { get; set; }
    public string LastName { get; set; }
    public string FirstName { get; set; }
    public string Postion { get; set; }
}

public class LeaguePlayer{
    [Key]
    public int LeaguePlayerID { get; set; }
    [ForeignKey("Player")]
    public int PlayerID { get; set; }
    [ForeignKey("Team")]
    public int TeamID { get; set; }
    [ForeignKey("League")]
    public int LeagueID { get; set; }
    public virtual Player Player { get; set; }
    public virtual Team Team { get; set; }
    public virtual League League { get; set; }

}
public class League{
    [Key]
    public int LeagueID { get; set; }
    public int CommissionerID { get; set; }
    public string LeagueName { get; set; }
    [ForeignKey("CommissionerID")]
    public virtual Manager Commisoner {get; set;} 
    public virtual ICollection<Team> Teams { get; set; }

}

2 个答案:

答案 0 :(得分:3)

Personnaly我认为这就是你想要的:

enter image description here

但在这里我看到了:

enter image description here

球员属于球队还是联盟?如果两者都比你想象的要复杂得多,那将会是一个多对多的三倍

好的,最后在确切知道你想要什么之后,会有2个“多对多”,一个“一对多”

enter image description here

AND! 将手动验证一名球员不属于同一联赛中的两支不同球队。

所以,在这里制作2个交叉点表,这很难理解,但如果你想在其他联赛中不会出现的联赛中的“自由球员”,那么这是唯一的出路

答案 1 :(得分:0)

由于延迟加载(使用虚拟关键字),实体不会加载已经使用的数据。如果我先打电话给联盟,数据就会被加载。通过编辑查询以包含需要使用的数据,数据显示出来。

       var x = await context.Teams
            .Include(t => t.League)
            .Include(t => t.Players)
            .ThenInclude(p => p.Player)
            .ToListAsync();