c# - 两列中的外键和导航属性

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

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

在“匹配”实体中,我希望有两个属性,int HomeTeam,int 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();

关于c# - 两列中的外键和导航属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23524365/

相关文章:

asp.net-mvc - 返回带有模型的 View 并转到特定的 anchor 标记

javascript - 在 JavaScript 中设置 window.location 挂起

c# - LINQ 或 lambda 表达式中的比较字符串之间的子句等效于什么?

c# - 如何在 PostgreSQL 中存储 DateTimeOffset

c# - 锁定/卡住 ListView 中的表格

c# - 转换数组并执行 contains

c# - 如何使用 LINQ 将列表垂直拆分为 n 个部分

c# - Entity Framework核心3.1.1多级继承

c# - 如何使用 ASP.NET MVC 返回动态 CSS?

c# - 无法获得产品数量