实体框架6代码优先关系/表创建问题

时间:2017-10-20 18:02:36

标签: c# entity-framework

我正在尝试进行Code First迁移,但是当我迁移时,其中一个模型/表格表现得非常奇怪。

团队和锦标赛制作了一个新表来参考哪支球队属于什么锦标赛和另一种方式 - 这完全是我想要的。

我正在尝试对Matchup和Team做同样的事情,为两者定义集合,但由于某种原因,它在Matchup中创建了一个属性TeamId,这是一个问题,因为Matchup应该能够存储多个队。

Screenshots for clarity

提前致谢。

1 个答案:

答案 0 :(得分:0)

当您在同一文件中有多个引用时,您需要告诉EF如何进行关系。我更喜欢流利的代码:

修复模型:

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

    public int WinnerId { get; set; }  // FK by convention
    public Team Winner { get; set; }
    public Tournament Tournament { get; set; }
    public ICollection<Team> Teams { get; set; }
}

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

    public ICollection<Player> Players{ get; set; }
    public ICollection<Matchup> Matchups{ get; set; }
    public ICollection<Matchup> MatchupWinners{ get; set; }
    public ICollection<Tournament> Tournaments{ get; set; }
}


// Configure 1 to many
modelBuilder.Entity<Matchup>()
    .HasOptional(m => m.Winner)
    .WithMany(p => p.MatchupWinners)
    .HasForeignKey(p => p.WinnerId);

// Configure many to many
modelBuilder.Entity<Matchup>()
        .HasMany(s => s.Teams)
        .WithMany(c => c.Matchups)
        .Map(t =>
                {
                    t.MapLeftKey("MatchupId");
                    t.MapRightKey("TeamId");
                    t.ToTable("MatchupTeam");
                });

但你也可以用注释来做:

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

    public ICollection<Player> Players{ get; set; }

    [InverseProperty("Teams")]
    public ICollection<Matchup> Matchups{ get; set; }

    [InverseProperty("Winner")]
    public ICollection<Matchup> MatchupWinners{ get; set; }

    public ICollection<Tournament> Tournaments{ get; set; }
}