我有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来获取数据。希望有一个更简单的解决方案。非常感谢你!
答案 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
的列表。