如何在 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
我目前无法验证代码,但它应该可以。
我正在使用 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
我目前无法验证代码,但它应该可以。