Search code examples
c#sqlentity-frameworkdatabase-migrationcode-first

I want to use a table ID to a different table that takes two of that tables ID, Entity Framework, code first


This is just something I did quickly, but it shows how I want it to be. OBS the database diagram table picture. So I want the Team table to have two relationships with the Transfer table (OldTeamId, NewTeamId), is this possible?

enter image description here

When I try to do the Add-Migration as it looks now I get a message

Unable to determine the relationship represented by navigation property 'Team.OldTeams' of type 'List'. Either manually configure the relationship, or ignore this property using the '[NotMapped]' attribute or by using 'EntityTypeBuilder.Ignore' in 'OnModelCreating'

Code:

public class Transfer
{
    public int Id { get; set; }
    public DateTime TransferDate { get; set; }
    public Player ThePlayer { get; set; }
    public string PlayerId { get; set; }
    public Team OldTeam { get; set; }
    public int OldTeamId { get; set; }
    public Team NewTeam { get; set; }
    public int NewTeamId { get; set; }
}

public class Team
{
    public Team()
    {
        Tournaments = new List<Tournament>();
        Players = new List<TeamPlayer>();
        OldTeams = new List<Transfer>();
        NewTeams = new List<Transfer>();
    }

    public int Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public byte[] TeamLogo { get; set; }
    public DateTime Founded { get; set; }
    public Country TheCountry { get; set; }
    public int CountryId { get; set; }
    public List<Tournament> Tournaments { get; set; }
    public List<TeamPlayer> Players { get; set; }
    public List<Transfer> OldTeams { get; set; }
    public List<Transfer> NewTeams { get; set; }
}

public class GamepediaContext : DbContext
{
    public DbSet<Country> Countries { get; set; }
    public DbSet<Map> Maps { get; set; }
    public DbSet<Player> Players { get; set; }
    public DbSet<Team> Teams { get; set; }
    public DbSet<TeamPlayer> TeamPlayers { get; set; }
    public DbSet<Tournament> Tournaments { get; set; }
    public DbSet<TournamentMap> TournamentMaps { get; set; }
    public DbSet<Transfer> Transfers { get; set; }
}



[1]: https://i.sstatic.net/Y8Set.png

Solution

  • Use foreignKey Attribute

    public class Transfer
    {
        public int Id { get; set; }
        public DateTime TransferDate { get; set; }
        public Player ThePlayer { get; set; }
        public string PlayerId { get; set; }   
        public Team OldTeam { get; set; }
        [ForeignKey("OldTeam")]
        public int OldTeamId { get; set; }
        public Team NewTeam { get; set; }
        [ForeignKey("NewTeam")]
        public int NewTeamId { get; set; }
    }