Отключение каскадного удаления в Entity Framework Core

244
10 июля 2018, 06:50

Я хочу создать 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; }
}
Answer 1

Во-первых, вам нужно до конца расставить навигационные свойства:

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

READ ALSO
Как работает метод GetILAsByteArray()?

Как работает метод GetILAsByteArray()?

Товарищи, возник следующий вопрос: метод

255
Как связать две базы

Как связать две базы

Можно ли связать две базы, возможно при помощи оператора where?

259
SLIM ошибка GET-запроса

SLIM ошибка GET-запроса

имеется Url, по которому в мобильном приложении запрашиваю населенные пункты, похожие на строку запроса

232