EF Core 2.2 - два внешних ключа к одной таблице - PullRequest
0 голосов
/ 29 января 2019

У меня проблема, аналогичная той, которая была опубликована здесь: Код Entity Framework First - два внешних ключа из одной таблицы , однако он очень старый и не применим к Core, и я не могу получитьпредложения поработать на меня.

По сути, я пытаюсь создать таблицу фикстур, которая будет иметь два внешних ключа для таблицы команд.Матч состоит из команды хозяев и команды гостей.Наличие пустых полей не вариант.

Рассмотрим прибор с двумя командами.

public class Fixture
{
    public int Id { get; set; }
    public Team HomeTeam { get; set; }
    public int HomeTeamId { get; set; }
    public Team AwayTeam { get; set; }
    public int AwayTeamId { get; set; }

    public virtual Team HomeTeam { get; set; }
    public virtual Team AwayTeam { get; set; }
}



public class Team
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }
    public String Name { get; set; }
    public ICollection<Fixture> HomeFixtures { get; set; } = new List<Fixture>();
    public ICollection<Fixture> AwayFixtures { get; set; } = new List<Fixture>();
}

Я получаю ошибку ...

Невозможно определить взаимосвязьпредставлен навигационным свойством «Fixture.HomeTeam» типа «Команда».Либо настройте отношение вручную, либо проигнорируйте это свойство, используя атрибут «[NotMapped]», либо используя «EntityTypeBuilder.Ignore» в «OnModelCreating».

Поэтому я попытался добавить некоторый код OnModelCreating в контексте базы данных:

protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Fixture>()
                    .HasOne(m => m.HomeTeam)
                    .WithMany(t => t.HomeFixtures)
                    .HasForeignKey(m => m.HomeTeamId)
                    .OnDelete(DeleteBehavior.Restrict);


        modelBuilder.Entity<Fixture>()
                    .HasOne(m => m.AwayTeam)
                    .WithMany(t => t.AwayFixtures)
                    .HasForeignKey(m => m.AwayTeamId)
                    .OnDelete(DeleteBehavior.Restrict);
    }

Тогда я получил ошибку:

Introducing FOREIGN KEY constraint 'FK_Fixtures_Teams_HomeTeamId' on table 'Fixtures' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.

Может кто-нибудь помочь с этой настройкой, пожалуйста?

Спасибо.

1 Ответ

0 голосов
/ 29 января 2019
public class Fixture
{
    public int Id { get; set; }
    public int HomeTeamId { get; set; }
    public int AwayTeamId { get; set; }

    [ForeignKey("HomeTeamId")]
    public virtual Team HomeTeam { get; set; }

    [ForeignKey("AwayTeamId")]
    public virtual Team AwayTeam { get; set; }
}

Таким образом, навигация будет работать.Также в соответствии с предложением @Ivan удалите дубликаты геттеров и сеттеров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...