0

J'ai 3 tables qui doivent être combinées dans un tableau. Sur ci-dessous vous pouvez voir les codes.EF Plusieurs à plusieurs relations sur 3 tables (API Fluent)

Le problème est que chaque joueur peut jouer sur une ou plusieurs équipes à chaque tournoi. Les joueurs et les équipes sont arrangés par chaque nouveau tournoi.

Alors, comment puis-je le mapper avec api fluide ou peut-être il ya une meilleure façon de le résoudre. Merci à partir de maintenant.

public class Player 
    { 
     public int PlayerID { get; set; } 
     public string FirstName { get; set; } 
     public string LastName { get; set; } 
     public string Phone { get; set; } 
     public DateTime TimeStamp { get; set; } 
     public ICollection<Team> Teams { get; set; } 
     public ICollection<Tournament> Tournaments { get; set; } 

    } 

public class Team 
    { 
     public int TeamID { get; set; } 
     public string Name { get; set; } 
     public DateTime TimeStamp { get; set; } 
     public ICollection<Player> Players { get; set; } 
     public ICollection<Tournament> Tournaments { get; set; } 
    } 

public class Tournament 
    { 
     public int TournamentID { get; set; } 
     public DateTime Date { get; set; } 
     public int PlaceID { get; set; } 
     public DateTime TimeStamp { get; set; } 
     public virtual Place Place { get; set; } 
     public ICollection<Player> Players { get; set; } 
     public ICollection<Team> Teams { get; set; } 
    } 



    public class BPContext : DbContext 
    { 
     public DbSet<Tournament> Tournaments { get; set; } 
     public DbSet<Place> Places { get; set; } 
     public DbSet<Table> Tables { get; set; } 
     public DbSet<Player> Players { get; set; } 
     public DbSet<Team> Teams { get; set; } 

     protected override void OnModelCreating(DbModelBuilder modelBuilder) 
     { 
      modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); 

     } 
    } 
+0

Pourquoi voudriez-vous tout combiner en 1 table? –

Répondre

1

Je ne vois pas ce que vous essayez d'accomplir avec ceci. Vous avez des tables qui contiennent tous les joueurs, toutes les équipes et tous les tournois.

Je suppose qu'il y aura un match à jouer? Ce que vous pouvez faire est de créer une autre table Correspondances, à l'entité utiliser semblable à ceci:

public class Match 
{ 

[Key] 
public int MatchId {get;set;} 

[ForeignKey("Tournament")] 
public int TournamentId {get;set;} 

[InverseProperty("Matches")] 
public virtual List<Team> Teams {get;set;} 

[InverseProperty("Matches")] 
public virtual List<Player> Players {get;set;} 

[InverseProperty("Matches")] 
public virtual Tournament Tournament {get;set;} 
} 

Cette nouvelle entité détient les 3 entités précédentes. Cependant, vous devez modifier les précédentes pour inclure ces changements:

public class Player 
{ 
    public int PlayerID { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public string Phone { get; set; } 
    public DateTime TimeStamp { get; set; } 

    [InverseProperty("Players")] 
    public virtual List<Match> Matches { get; set; } 

    [InverseProperty("Players")] 
    public virtual List<Team> Teams {get;set;} 
} 

Obtenir tous les tournois pour le joueur peut se faire avec LINQ: ctx.Players.Where (x => x.PlayerId == 15) .Matches.Select (x => x.TournamentId).

Si vous voulez voir tous les joueurs d'un tournoi: ctx.Matches.Where (x => x.TournamentId == 15) .Players.Select (x => x.Name).

public class Team 
{ 
    public int TeamID { get; set; } 
    public string Name { get; set; } 
    public DateTime TimeStamp { get; set; } 

    [InverseProperty("Teams")] 
    public List<Match> Matches {get;set;} 

    [InverseProperty("Teams")] 
    public List<Player> Players {get;set;} 
} 

public class Tournament 
{ 
    public int TournamentID { get; set; } 
    public DateTime Date { get; set; } 
    public int PlaceID { get; set; } 
    public DateTime TimeStamp { get; set; } 
    public virtual Place Place { get; set; } 

    [InverseProperty("Tournament")] 
    public virtual List<Match> Matches {get;set;} 
} 
Questions connexes