繁体   English   中英

如何在实体框架代码优先中创建具有自引用的模型?

[英]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来生成可为空的 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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM