首先与代码建立一对多的关系。这个外键来自哪里?

时间:2017-10-26 19:04:16

标签: c# entity-framework

我的数据类是

public class Data
{
        public int Id { get; set; }

        public int LeagueId { get; set; }
        public League League { get; set; }

        public int HomeTeamId { get; set; }
        public virtual Team HomeTeam { get; set; }

        public int AwayTeamId { get; set; }
        public virtual Team AwayTeam { get; set; }
}

我的团队课程是

public class Team
{
        public int Id { get; set; }
        public string Name { get; set; }
        public virtual ICollection<Data> Datas { get; set; }
}

在我的FK_dbo.Data_dbo.Teams_Team_Id表格中生成额外的外键Data以及额外的列。

enter image description here

所以我的第一个问题是,那个外键是如何在那里创建的?

我可以在实体框架的同一个表中使用两个一对多的关系吗?

我需要将Data表中的HomeTeamId和AwayTeamId设置为一对多关系

2 个答案:

答案 0 :(得分:1)

尝试:

public class Data
{
    public int Id { get; set; }

    public int LeagueId { get; set; }

    [ForeignKey("LeagueId")] /* Add explicit foreign key data annotations */
    public League League { get; set; }

    public int HomeTeamId { get; set; }

    [ForeignKey("HomeTeamId")]
    public virtual Team HomeTeam { get; set; }

    public int AwayTeamId { get; set; }

    [ForeignKey("AwayTeamId")]
    public virtual Team AwayTeam { get; set; }
}

public class Team
{
    public Team()
    {
        this.HomeTeamData = new HashSet<Data>();
        this.AwayTeamData = new HashSet<Data>();
    }
    public int Id { get; set; }
    public string Name { get; set; }
    [InverseProperty("HomeTeam")]
    public virtual ICollection<Data> HomeTeamData { get; set; }
    [InverseProperty("AwayTeam")]
    public virtual ICollection<Data> AwayTeamData { get; set; }
}

如果有帮助,请告诉我。

答案 1 :(得分:0)

我怀疑你可能达到了实体能够找出你想要的东西的极限。您可能需要考虑使用一些Entity Annotations来指示实体您希望它实际执行的操作。