EF Core仅创建一个自引用外键,而不是2

时间:2019-07-18 11:39:50

标签: asp.net-core entity-framework-core asp.net-core-2.2

我正在尝试创建一个模型来表示游戏中的任务。完成任务后,将根据赢得任务的团队执行另一个任务。例如,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; }
}

如何使迁移为这两者生成列/外键?

编辑:能够使用https://stackoverflow.com/a/46832490/11575271

中的InverseProperty解决此问题

1 个答案:

答案 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