查询EF Core一对多以及进一步的一对多关系

时间:2019-01-13 12:35:25

标签: asp.net-core entity-framework-core ef-core-2.1

我有3个模型,CompetitionTeamTeamUser。每个竞赛都有很多团队,每个团队都有很多用户。在将数据返回到视图时,我想使用EF Core将所有3个绑定在一起,但是我无法真正绑定到用户。因此,我必须在自己的观点上实现一些复杂的逻辑,尽管它可以工作,但看起来超级混乱且令人困惑。我确定有一种方法可以将数据一起返回。

Competition模型类:

public class Competition
{
    [Key]
    public int ID { get; set; }
    [Required]
    [Display(Name = "Competition Name")]
    public string CompetitionName { get; set; }
    [Required]
    public string Status { get; set; }

    public ICollection<Team> Teams { get; set; }
}   

Team模型类:

public class Team
{
    [Key]
    public int TeamID { get; set; }

    [Required]
    [DisplayName("Team Name")]
    public string TeamName { get; set; }

    [ForeignKey("CompetitionID")]
    public int CompetitionID { get; set; }

    public ICollection<TeamUser> TeamUsers { get; set; }

}

TeamUser模型类:

public class TeamUser
{
    [Key]
    public int TeamUserID { get; set; }

    [ForeignKey("TeamId")]
    public int TeamId { get; set; }
    public string UserId { get; set; }
}

这是我的控制器。

public IActionResult Index()
{
     var competition = _context.Competitions
         .Include(c => c.Teams)
         .ToList();

     var teamUsers = _context.TeamUsers
         .ToList();

     if (competition == null)
     {
         return NotFound();
     }

     CompetitionIndexViewModel vm = new CompetitionIndexViewModel();
     vm.Competition = competition;
     vm.TeamUsers = teamUsers;

     return View(vm);
}

如您所见,它非常凌乱,我不得不求助于使用viewmodel来获取数据。希望有一个更简单的解决方案。非常感谢你!

1 个答案:

答案 0 :(得分:2)

您不需要使用import org.apache.commons.io.input.BOMInputStream ... BOMInputStream bis = new BOMInputStream(file.getInputStream()) //get charset from stream or default if not defined String charset = bis.getBOM()?.getCharsetName() ?: "UTF-8" String content = bis.getText(charset) 。只需按照以下方式编写查询,然后将CompetitionIndexViewModel传递到视图即可。

List<Competition>

现在在视图中,每个public IActionResult Index() { List<Competition> competitions = _context.Competitions .Include(c => c.Teams).ThenInclude(t => t.TeamUsers) .ToList(); return View(competitions); } 应该具有一个Competition的列表,每个Teams应该具有一个Team的列表。