我正在创建幻想足球比赛,并且正在使用Entity Framework映射数据库。
有一个表,其中包含所有可能的足球运动员,称为Players,该表包含称为Teams的球队信息,该表包含联赛信息,并且该表跟踪哪个球员属于哪个球队(因为一个球员可以属于许多球队,具体取决于他们所在的联赛)称为联赛球员。
但是,当我尝试从团队中获取所有球员时,我遇到了一个问题。当我从上下文查询时,玩家显示为空,而如果我查看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);
}
除错
楷模
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个“多对多”和一个“一对多”
和!您将手动验证一个球员不在同一联盟的2个不同团队中。
因此,在这里建立2个联结表,将很难理解,但是如果您想要在其他联赛中不会出现的联赛中的“自由球员”,那是唯一的选择