0

I'm trying to set up a competetion.

I have following models:

public class Player
{
    [Required]
    public Guid PlayerId { get; set; }

    [Required]
    public string Firstname { get; set; }

    [Required]
    public string Lastname { get; set; }
}

public class Team
{
    [Required]
    public Guid TeamId { get; set; }

    [Required]
    public string TeamName { get; set; }

    [Required]
    [MaxLength(2)]
    [ForeignKey("TeamPlayerFK")]
    public List<Player> PlayersList { get; set; }
}

public class Match
{
    [Required]
    public Guid MatchId { get; set; }

    [ForeignKey("MatchTeamFK")]
    public Team Team { get; set; }

    [ForeignKey("MatchPlayerFK")]
    public Player Player { get; set; }

    [Required]
    public DateTime MatchDateTime { get; set; }

    public int? Points { get; set; }
}

Having this setup makes a player only able to be in one team. It should be able to join multiple teams. Could someone help me in the right direction?

Lotte Lemmens
  • 551
  • 5
  • 11

1 Answers1

2

Here's the answer I found with help of @GertArnold:

public class Player
{
    [Required]
    public Guid PlayerId { get; set; }

    [Required]
    public string Firstname { get; set; }

    [Required]
    public string Lastname { get; set; }

    public virtual ICollection<TeamPlayer> TeamPlayers { get; set; }

    public virtual ICollection<Match> Matches { get; set; }
}
public class Team
{
    [Required]
    public Guid TeamId { get; set; }

    [Required]
    public string TeamName { get; set; }

    [Required]
    public virtual ICollection<TeamPlayer> TeamPlayers { get; set; }
}
public class TeamPlayer
{
    public Guid TeamPlayerId { get; set; }

    public Guid TeamId { get; set; }
    public Team Team { get; set; }

    public Guid PlayerId { get; set; }
    public Player Player { get; set; }
}
public class Match
{
    [Required]
    public Guid MatchId { get; set; }

    public Guid TeamId { get; set; }
    public Team Team { get; set; }

    public Guid PlayerId { get; set; }
    public Player Player { get; set; }

    [Required]
    public DateTime MatchDateTime { get; set; }

    public int? Points { get; set; }
}

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<TeamPlayer>()
            .HasOne(tp => tp.Team)
            .WithMany(t => t.TeamPlayers)
            .HasForeignKey(tp => tp.TeamId);

        modelBuilder.Entity<TeamPlayer>()
            .HasOne(tp => tp.Player)
            .WithMany(p => p.TeamPlayers)
            .HasForeignKey(tp => tp.PlayerId);

        base.OnModelCreating(modelBuilder);
    }
Lotte Lemmens
  • 551
  • 5
  • 11