В моей модели db у меня есть таблица вакансий и таблица JobResults.Обязательная связь с каскадным удалением (Entity Framework)
Определение модели выглядит следующим образом:
public class Job
{
public int Id { get; set; }
public virtual JobResult Result { get; set; }
}
public class JobResult
{
public int JobId { get; set; }
public virtual Job Job { get; set; }
}
И текучее API настраиваемого отношения заключается в следующем:
modelBuilder.Entity<Job>()
.HasRequired(x => x.Result)
.WithRequiredPrincipal(x => x.Job)
.WillCascadeOnDelete(true);
modelBuilder.Entity<JobResult>()
.HasKey(x => x.JobId);
Как вы видите, это требуется к необходимости отношений, где они оба передают идентификатор задания в качестве первичного ключа. Когда задание удалено, я явно хочу, чтобы JobResult также был удален (поэтому я добавил WillCascadeOnDelete()).
Однако, когда я обновить свою базу данных с определениями выше, я получаю следующее сообщение об ошибке:
Introducing FOREIGN KEY constraint 'FK_dbo.JobResults_dbo.Jobs_JobId' on table 'JobResults' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints. Could not create constraint. See previous errors.
Это исключительно происходит, когда я включаю WillCascadeOnDelete().
Почему это происходит?
Вы уверены, что это ваши единственные столы, относящиеся к Jobresult или работе? Потому что я просто попробовал ваш код, и он не дал никаких ошибок. Вы знаете, что по умолчанию активируется каскадное удаление, а если есть две таблицы, ссылающиеся на одну и ту же таблицу, то 2 раза каскадное удаление - проблема –