У меня 3 модели, Competition
, Team
и TeamUser
. В каждом соревновании много команд, а в каждой команде много пользователей. Я хочу использовать 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, чтобы перезаписать мои данные. Надеюсь, что есть более простое решение. Большое спасибо!