CallumVass
CallumVass

Reputation: 11448

EF Adding an additional FK?

I have the following 2 entities:

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; }
}

I have then mapped it like so:

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);
    }
}

But when I add a migration, EF is creating an additional FK and column to my Fixture table and I've no idea why? How can I tell it not too?

enter image description here

As you can see its added a column called Team_Id and created an FK from it even tho I have specified the relationship in the mapping?

Upvotes: 0

Views: 27

Answers (1)

Iraj
Iraj

Reputation: 1522

use this code:

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; }
}

And :

  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);
      }
  }

Upvotes: 1

Related Questions