Asp.net mvc 3个表上的EF多对多关系(Fluent API)
我有3张桌子需要合并在一张桌子里。在下面,您可以看到代码 问题是每名球员在每场比赛中都可以参加一支或多支球队的比赛。每届新锦标赛的球员和球队安排 那么,我如何用fluentapi映射它,或者也许有更好的方法来解决它。从现在起谢谢你Asp.net mvc 3个表上的EF多对多关系(Fluent API),asp.net-mvc,entity-framework,entity-framework-4,mapping,fluent-interface,Asp.net Mvc,Entity Framework,Entity Framework 4,Mapping,Fluent Interface,我有3张桌子需要合并在一张桌子里。在下面,您可以看到代码 问题是每名球员在每场比赛中都可以参加一支或多支球队的比赛。每届新锦标赛的球员和球队安排 那么,我如何用fluentapi映射它,或者也许有更好的方法来解决它。从现在起谢谢你 public class Player { public int PlayerID { get; set; } public string FirstName { get; set; } public stri
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>();
}
}
公共类播放器
{
public int PlayerID{get;set;}
公共字符串名{get;set;}
公共字符串LastName{get;set;}
公用字符串电话{get;set;}
公共日期时间时间戳{get;set;}
公共ICollection团队{get;set;}
公共ICollection锦标赛{get;set;}
}
公开课小组
{
public int TeamID{get;set;}
公共字符串名称{get;set;}
公共日期时间时间戳{get;set;}
公共ICollection播放器{get;set;}
公共ICollection锦标赛{get;set;}
}
公开课比赛
{
公共int TournamentID{get;set;}
公共日期时间日期{get;set;}
公共int PlaceID{get;set;}
公共日期时间时间戳{get;set;}
公共虚拟场所{get;set;}
公共ICollection播放器{get;set;}
公共ICollection团队{get;set;}
}
公共类BPContext:DbContext
{
公共DbSet锦标赛{get;set;}
公共数据库集位置{get;set;}
公共DbSet表{get;set;}
公共DbSet播放器{get;set;}
公共DbSet团队{get;set;}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove();
}
}
我看不出你想用这个做什么。您拥有包含所有球员、所有球队和所有锦标赛的表格
我想会有一场比赛吗?您可以创建另一个表匹配项,以使用类似于以下内容的实体:
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;}
}
公共类匹配
{
[关键]
公共int MatchId{get;set;}
[外键(“锦标赛”)]
公共int TournamentId{get;set;}
[反向属性(“匹配”)]
公共虚拟列表团队{get;set;}
[反向属性(“匹配”)]
公共虚拟列表播放器{get;set;}
[反向属性(“匹配”)]
公开虚拟锦标赛{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;}
}
公共类播放器
{
public int PlayerID{get;set;}
公共字符串名{get;set;}
公共字符串LastName{get;set;}
公用字符串电话{get;set;}
公共日期时间时间戳{get;set;}
[反向属性(“玩家”)]
公共虚拟列表匹配{get;set;}
[反向属性(“玩家”)]
公共虚拟列表团队{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 int TeamID{get;set;}
公共字符串名称{get;set;}
公共日期时间时间戳{get;set;}
[逆属性(“团队”)]
公共列表匹配{get;set;}
[逆属性(“团队”)]
公共列表玩家{get;set;}
}
公开课比赛
{
公共int TournamentID{get;set;}
公共日期时间日期{get;set;}
公共int PlaceID{get;set;}
公共日期时间时间戳{get;set;}
公共虚拟场所{get;set;}
[反向属性(“锦标赛”)]
公共虚拟列表匹配{get;set;}
}
为什么要将所有内容合并到一个表中?
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;}
}