两列外键和导航属性

本文关键字:导航 属性 两列 | 更新日期: 2023-09-27 18:02:08

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

在"Match"实体中,我想要有两个属性,一个是HomeTeam,一个是AwayTeam,其中包含TeamId作为FK。

是否有可能使用导航属性来获取所有比赛(主场和客场比赛)为一个特定的球队与此设置?

如果有,怎么做?我只在Id只有一列时才使用导航属性。

两列外键和导航属性

你的类应该看起来像这样:

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来描述你的表和关系是如何配置的。

编辑

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

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