代码之家  ›  专栏  ›  技术社区  ›  zzdhxu

查询ef核心一对多和进一步的一对多关系

  •  0
  • zzdhxu  · 技术社区  · 6 年前

    我有三个型号, Competition , Team TeamUser . 每场比赛有许多队,每个队有许多用户。我想在将数据返回到视图时使用ef core将所有3绑定在一起,但我不能真正绑定到用户。因此,我必须在我的视图中实现一些复杂的逻辑,尽管它可以工作,但看起来非常混乱和混乱。我相信有一种方法可以一起返回数据。

    竞争 模型类:

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

    团队 模型类:

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

    团队用户 模型类:

    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 回复  |  直到 6 年前
        1
  •  2
  •   TanvirArjel    6 年前

    你不需要使用 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 应该有一个列表 TeamUsers .