0

1 つのテーブルに結合する必要がある 3 つのテーブルがあります。以下にコードを示します。

問題は、各プレイヤーが各トーナメントで 1 つまたは複数のチームでプレーできることです。新しいトーナメントごとにプレーヤーとチームのアレンジャー。

流暢なAPIでそれをどのようにマッピングできますか、それを解決するためのより良い方法があるかもしれません. これからよろしくお願いします。

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

        }
    }
4

1 に答える 1

1

これで何を達成しようとしているのかわかりません。すべてのプレーヤー、すべてのチーム、すべてのトーナメントを含むテーブルがあります。

試合があると思いますか?できることは、別のテーブル Matches を作成して、次のようなエンティティを使用することです。

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

この新しいエンティティは、以前の 3 つのエンティティすべてを保持します。ただし、これらの変更を含めるには、以前のものを変更する必要があります。

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

プレーヤーのすべてのトーナメントを取得するには、LINQ を使用します: ctx.Players.Where(x => x.PlayerId == 15).Matches.Select(x => x.TournamentId)。

トーナメントに参加しているすべてのプレイヤーを見たい場合: 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;}
}
于 2012-10-02T05:19:17.523 に答える