EF添加额外的FK?

时间:2014-03-16 20:17:22

标签: entity-framework entity-framework-6

我有以下两个实体:

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

    public virtual ICollection<Fixture> Fixtures { get; set; }
}

public class Fixture
{
    public int Id { get; set; }
    public Result Result { get; set; }

    public int HomeTeamId { get; set; }
    public int AwayTeamId { get; set; }

    public virtual Team HomeTeam { get; set; }
    public virtual Team AwayTeam { get; set; }
}

然后我就这样映射了它:

public class FixtureMap : EntityTypeConfiguration<Fixture>
{
    public FixtureMap()
    {
        HasRequired(x => x.AwayTeam).WithMany().HasForeignKey(x => x.AwayTeamId);
        HasRequired(x => x.HomeTeam).WithMany().HasForeignKey(x => x.HomeTeamId);
    }
}

但是当我添加迁移时,EF正在为我的Fixture表创建一个额外的FK和列,我不知道为什么?我怎么能不这样说呢?

enter image description here

正如你所看到它添加了一个名为Team_Id的列,并从中创建了一个FK,即使我在映射中指定了关系?

1 个答案:

答案 0 :(得分:1)

使用此代码:

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

[InverseProperty("HomeTeam")]
public virtual ICollection<Fixture> HomeFixtures { get; set; }

[InverseProperty("AwayTeam")]
public virtual ICollection<Fixture> AwayFixtures { get; set; }
}


public class Fixture
{
   public int Id { get; set; }
   public Result Result { get; set; }

   public int HomeTeamId { get; set; }
   public int AwayTeamId { get; set; }

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

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

并且:

  public class FixtureMap : EntityTypeConfiguration<Fixture>
  {
      public FixtureMap()
      {
          HasRequired(x => x.AwayTeam).WithMany().HasForeignKey(x => x.AwayTeamId).willCascadeOnDelete(false);
          HasRequired(x => x.HomeTeam).WithMany().HasForeignKey(x => x.HomeTeamId);
      }
  }