Это теоретически правильно, но SQL-серверу (не Entity Framework) это не нравится, потому что ваша модель позволяет одному сотруднику быть членом первой и второй групп. Если Team
удалено, это приведет к нескольким путям удаления к одному и тому же объекту Employee
.
Это нельзя использовать вместе с каскадным удалением, которое используется по умолчанию в коде EF, если вы определили внешний ключ как обязательный (не обнуляемый).
Если вы хотите избежать исключения, вы должны использовать свободное отображение:
public Context : DbContext
{
public DbSet<Employee> Employees { get; set; }
public DbSet<Team> Teams { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Employee>()
.HasRequired(e => e.SecondTeam)
.WithMany(t => t.SecondEmployees)
.HasForeignKey(e => e.FirstTeamId)
.WillCascadeOnDelete(false);
...
}
}
Это приведет к сценарию, в котором вы должны удалить участников SecondTeam вручную перед удалением команды.