Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core 查询EF核心一对多和进一步的一对多关系_Asp.net Core_Entity Framework Core_Ef Core 2.1 - Fatal编程技术网

Asp.net core 查询EF核心一对多和进一步的一对多关系

Asp.net core 查询EF核心一对多和进一步的一对多关系,asp.net-core,entity-framework-core,ef-core-2.1,Asp.net Core,Entity Framework Core,Ef Core 2.1,我有三种型号,Competition,Team和TeamUser。每场比赛都有许多队,每个队都有许多用户。我想在将数据返回到视图时使用EF Core将所有3个绑定在一起,但我不能真正绑定到用户。因此,在我看来,我必须实现一些复杂的逻辑,尽管它有效,但看起来非常混乱和混乱。我相信有一种方法可以一起返回数据 竞赛车型类别: public class Competition { [Key] public int ID { get; set; } [Required] [

我有三种型号,
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; }
}
TeamUser
model class:

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来获取数据。希望有一个更简单的解决方案。多谢各位

您不需要使用
CompetitionIndexViewModel
。只需按如下方式编写查询,并将
列表
传递给视图

public IActionResult Index()
{
     List<Competition> competitions = _context.Competitions
         .Include(c => c.Teams).ThenInclude(t => t.TeamUsers)
         .ToList();

     return View(competitions);
}
public IActionResult Index()
{
列出比赛=_context.competitions
.Include(c=>c.Teams)。然后Include(t=>t.TeamUsers)
.ToList();
返回视图(竞赛);
}

现在在视图中,每个
竞赛
都应该有一个
团队的列表
,每个
团队
都应该有一个
团队用户的列表
,,以及它有什么乱七八糟的地方(除了此代码在控制器中,没有抽象,您返回的所有数据都未经过滤,=大量数据)?使用视图模型是一种有效的方法,视图模型正是为之而设计的,它将数据转化为一个视图的形状来使用它(在视图中直接使用实体或作为WebAPI结果是一种糟糕的做法)。我不完全理解您的第一行。非常抱歉。。。“它有什么乱七八糟的地方(除了此代码在控制器中,没有抽象,并且返回所有未经过滤的数据,=大量数据)?”您是否正在寻找
然后包含
?是的,绝对正确。我刚才试过了,但发现了一些错误。现在我回去检查它的工作@zzdhxu:这些错误只是intellisense错误,因为
.thenClude
无法确定您想要的是单包含还是复数包含(在t或t的集合上)。Visual Studio Itellisence存在问题,可能不会给您任何intellisense或intellisense错误。你只需要继续打字。我刚才也试过,但没用。只要再试一次,它的工作就很奇怪……例如,如果您只需要具有特定名称的团队,您会如何筛选?