查询EF Core一对多和进一步的一对多关系
Querying EF Core one-to-many and further one-to-many relationship
我有 3 个模型,Competition
、Team
和 TeamUser
。每个比赛都有很多团队,每个团队都有很多用户。当 return 将数据发送到视图时,我想使用 EF Core 将所有 3 个绑定在一起,但我无法真正绑定到用户。因此,我必须在我看来实现一些复杂的逻辑,虽然它有效,但看起来非常混乱和混乱。我确定有办法 return 将数据整合在一起。
Competition
型号 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; }
}
Team
型号 class:
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
型号 class:
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
。只需按如下方式编写您的查询并将 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
.
的列表
我有 3 个模型,Competition
、Team
和 TeamUser
。每个比赛都有很多团队,每个团队都有很多用户。当 return 将数据发送到视图时,我想使用 EF Core 将所有 3 个绑定在一起,但我无法真正绑定到用户。因此,我必须在我看来实现一些复杂的逻辑,虽然它有效,但看起来非常混乱和混乱。我确定有办法 return 将数据整合在一起。
Competition
型号 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; }
}
Team
型号 class:
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
型号 class:
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
。只需按如下方式编写您的查询并将 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
.