0

我有3个表格需要在一个表格中进行组合。在下面你可以看到代码。EF 3个表格上的多对多关系(流利API)

问题是每个玩家都可以在每个锦标赛上的一个或多个团队中玩。每个新比赛的球员和球队安排。

那么我怎样才能将它与流利的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>(); 

     } 
    } 
+0

你为什么要把所有东西合并成一张表? –

回答

1

我没有看到你想用这个完成什么。你有包含所有球员,所有球队和所有锦标赛的表格。

我想会有一场比赛可以玩吗?你可以做的是创建另一个表匹配,使用类似于此的实体:

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个以前的实体。然而,你必须修改以前的包含这些改动:ctx.Players.Where(X => x.PlayerId == 15).Matches.Select:

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来完成(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;} 
}