Я хочу создать 2 таблицы: Team, Match, где в таблице Match существует 2 ссылки на таблицу Team. Когда пытаюсь сгенерировать БД, появляется ошибка связанная с каскадным удалением. Можете подсказать, как решить проблему?
public class Team {
public int Id { get; set; }
public string Name { get; set; }
}
public class Match {
public int Id { get; set; }
public int? HomeId { get; set; }
public int? GuestId { get; set; }
public Team Home { get; set; }
public Team Guest { get; set; }
}
Во-первых, вам нужно до конца расставить навигационные свойства:
public class Team
{
public int Id { get; set; }
public string Name { get; set; }
public virtual IEnumerable<Match> HomeMatches { get; set; }
public virtual IEnumerable<Match> GuestMatches { get; set; }
}
public class Match
{
public int Id { get; set; }
public int HomeId { get; set; }
public int GuestId { get; set; }
public Team Home { get; set; }
public Team Guest { get; set; }
}
Во-вторых, в ApplicationDbContext добавьте:
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
builder.Entity<Match>()
.HasOne(m => m.Home)
.WithMany(t => t.HomeMatches)
.OnDelete(DeleteBehavior.Restrict);
builder.Entity<Match>()
.HasOne(m => m.Guest)
.WithMany(t => t.GuestMatches)
.OnDelete(DeleteBehavior.Restrict);
}
(Формально хватило бы и один каскад отключить)
На метаинте есть подробности: https://metanit.com/sharp/entityframeworkcore/3.2.php
Сборка персонального компьютера от Artline: умный выбор для современных пользователей