如何在 Entity Framework Code-First 中创建具有自引用的模型?

How to create a model with self reference in Entity Framework Code-First?

我正在使用 Entity Framework Core 3.1 并尝试处理简单的场景:在体育联赛中有很多比赛,但我想处理推迟的比赛。这是我的模型:

public class Game
{
    public int GameId { get; set; }
    public DateTime StartTime { get; set; }
    public int HomeTeamId { get; set; }
    public int AwayTeamId { get; set; }
    public int? PostponedGameId { get; set; } // Original game that didn't happened and was postponed to 'this' game. 

    public Team HomeTeam { get; set; }
    public Team AwayTeam { get; set; }
    public Game PostponedGame { get; set; }
}

显然对于大多数游戏来说 PostponedGameId 将为空。

我如何创建一个 fluent API 来生成可为 null 的 FK (PostponedGameId)?

编辑:

这是我目前拥有的:

        modelBuilder.Entity<Game>()
            .HasOne<Game>(g => g.PostponedGame)
            .WithOne()
            .OnDelete(DeleteBehavior.Cascade);

但我不知道如何声明 PostponedGameId 是外键。我什至不确定这是否正确,因为我没有在没有指定外键的情况下 运行 它。

所以我建议如下:

modelBuilder.Entity<Game>()
            .HasOne<Game>(g => g.PostponedGame)
            .WithOne()
            .HasForeignKey<Game>(g => g.PostponedGameId) // Defines the FK 
            .OnDelete(DeleteBehavior.Cascade)
            .IsRequired(false); // Tells ef-core that the FK is optional

我目前无法验证代码,但它应该可以。