我正在尝试创建一个模型来表示游戏中的任务。完成任务后,将根据赢得任务的团队执行另一个任务。例如,Mission1,如果TeamA获胜,则您可以执行Mission2;如果TeamB获胜,则您可以执行Mission3。
对于每个任务,我需要两个自引用列,TeamAWinMission和TeamBWinMission,它们保留了另一个任务的外键。
迁移似乎只能识别模型中的单个自引用。
这将为TeamAWinMission创建一列:
public class Mission
{
public int Id { get; set; }
public string Name { get; set; }
public Mission TeamAWinMission{ get; set; }
}
这只会为TeamBWinMission创建一列:
public class Mission
{
public int Id { get; set; }
public string Name { get; set; }
public Mission TeamAWinMission{ get; set; }
public Mission TeamBWinMission{ get; set; }
}
如何使迁移为这两者生成列/外键?
中的InverseProperty解决此问题答案 0 :(得分:0)
Mission
模型中似乎存在一对一的自引用关系,您可以尝试在模型中定义[ForeignKey]
,如下所示:
public class Mission
{
public int Id { get; set; }
public string Name { get; set; }
[ForeignKey("TeamAWinMission")]
public int? TeamAWinMissionId { get; set; }
public Mission TeamAWinMission { get; set; }
[ForeignKey("TeamBWinMission")]
public int? TeamBWinMissionId { get; set; }
public Mission TeamBWinMission { get; set; }
}
然后使用Include
属性在控制器中加载相关数据:
public IActionResult Mission()
{
var result = _context.Missions
.Include(m => m.TeamAWinMission)
.Include(m => m.TeamBWinMission)
.ToList();
return View(result);
}
参考:https://docs.microsoft.com/en-us/ef/core/querying/related-data