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

问题描述 投票:0回答:1

我正在使用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将为null。

我如何创建将生成可为空的FK(PostponedGameId)的fluent API

编辑:

这是我到目前为止所拥有的:

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

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

c# .net-core ef-code-first ef-migrations ef-core-3.0
1个回答
0
投票

所以我建议如下内容:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.