У меня есть объект «Сотрудник» и таблица соединений ManagedBy, которую я хочу представить. управленческие отношения между сотрудниками. ManagedBy состоит из ManagerId и Subordinate (оба — сотрудники), а его ключ представляет собой комбинацию этих двух. Проблема заключается в поведении OnDelete, когда я хочу удалить любую связанную запись ManagedBy при удалении сотрудника независимо от того, был ли он менеджером или подчиненным.
При создании шаблонов я не могу использовать следующее поведение каскадного удаления. :
Код: Выделить всё
modelBuilder.Entity(entity =>
{
entity.HasKey(x => new {x.ManagerId, x.SubordinateId});
modelBuilder.Entity()
.HasOne(em => em.Manager)
.WithMany(e => e.MBManagers)
.HasForeignKey(em => em.ManagerId);
.OnDelete(DeleteBehavior.Cascade);
modelBuilder.Entity()
.HasOne(em => em.Subordinate)
.WithMany(e => e.MBSubordinates)
.HasForeignKey(em => em.SubordinateId)
.OnDelete(DeleteBehavior.Cascade);
});
Введение ограничения FOREIGN KEY «FK_ManagedBys_AspNetUsers_SubordinateId» в таблице «ManagedBys» ' может вызвать циклы или несколько каскадных путей. Укажите ON DELETE NO ACTION или ON UPDATE NO ACTION или измените другие ограничения FOREIGN KEY.
При использовании предлагаемого поведения удаления No Action на подчиненном я могу удалить Менеджер и связанные записи ManageBy также удаляются, но не Подчиненный:
Код: Выделить всё
modelBuilder.Entity(entity =>
{
entity.HasKey(x => new {x.ManagerId, x.SubordinateId});
modelBuilder.Entity()
.HasOne(em => em.Manager)
.WithMany(e => e.MBManagers)
.HasForeignKey(em => em.ManagerId);
.OnDelete(DeleteBehavior.Cascade);
modelBuilder.Entity()
.HasOne(em => em.Subordinate)
.WithMany(e => e.MBSubordinates)
.HasForeignKey(em => em.SubordinateId)
.OnDelete(DeleteBehavior.NoAction);
});
Как обеспечить удаление всех записей ManageBy при удалении связанного сотрудника независимо от того, является ли он руководителем или подчиненным?
Подробнее здесь: https://stackoverflow.com/questions/785 ... lete-behav
Мобильная версия