У меня проблема, аналогичная той, которая была опубликована здесь: Код 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.
Может кто-нибудь помочь с этой настройкой, пожалуйста?
Спасибо.