Как создать модель с собственной ссылкой в ​​Entity Framework Code-First? - PullRequest
0 голосов
/ 02 февраля 2020

Я использую 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 - это внешний ключ. Я даже не уверен, что это правильно, потому что я не запускал его без указания внешнего ключа.

1 Ответ

2 голосов
/ 02 февраля 2020

Поэтому я бы предложил что-то вроде следующего:

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

В настоящее время я не могу проверить код, но он должен работать.

...