Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3个表上的EF多对多关系(Fluent API)_Asp.net Mvc_Entity Framework_Entity Framework 4_Mapping_Fluent Interface - Fatal编程技术网

Asp.net mvc 3个表上的EF多对多关系(Fluent API)

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

我有3张桌子需要合并在一张桌子里。在下面,您可以看到代码

问题是每名球员在每场比赛中都可以参加一支或多支球队的比赛。每届新锦标赛的球员和球队安排

那么,我如何用fluentapi映射它,或者也许有更好的方法来解决它。从现在起谢谢你

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