两列中的外键和导航属性

时间:2014-05-07 17:28:42

标签: c# asp.net-mvc entity-framework navigation-properties

我有一个名为“Team”的实体和一个名为“Match”的实体

在“匹配”实体中,我希望有两个属性,即HomeTeam,int AwayTeam,它将TeamId包含为FK。

是否可以使用navagation属性为具有此设置的特定团队获取所有匹配(主场和客场比赛)?

如果是这样,那怎么办? 当Id仅在一列中时,我只使用了导航属性。

1 个答案:

答案 0 :(得分:0)

你的课程应该是这样的:

public class Team
{
    public int Id { get; set; }
    public string Name { get; set; }
}

public class Match
{
    public int Id { get; set; }
    public string Name { get; set; }

    public virtual Team HomeTeam { get; set; }
    public virtual Team AwayTeam { get; set; }
}

你的背景是这样的:

public class MyEntities : DbContext
{
    public DbSet<Team> Teams { get; set; }
    public DbSet<Match> Matches { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Team>().ToTable("Team");
        modelBuilder.Entity<Match>().ToTable("Match");

        modelBuilder.Entity<Match>().HasOptional(x => x.HomeTeam).WithMany().Map(m => m.MapKey("HomeTeamId"));
        modelBuilder.Entity<Match>().HasOptional(x => x.AwayTeam).WithMany().Map(m => m.MapKey("AwayTeamId"));
    }
}

基本上,您使用Fluent API来描述如何配置表和关系。

修改

要回答您的示例查询,请获取由Team ID 1播放的所有比赛(主场和客场比赛)的列表:

MyEntities db = new MyEntities();

List<Match> matches = db.Matches.Where(
    t => t.HomeTeam.Id == 1 || t.AwayTeam.Id == 1
).ToList();