Я создаю базу данных, которая выглядит следующим образом: у меня есть Questions
таблица:
public class Question
{
[Key]
public int Id { get; set; }
public List<Answer> Answers { get; set; }
public List<SendedAnswer> SendedAnswers { get; set; }
}
Кто-то может отправить SendedAnswer
на каждый вопрос:
public class SendedAnswer
{
[Key]
public int Id { get; set; }
[ForeignKey("Question")]
public int QuestionId{ get; set; }
public Question Question { get; set; }
public List<ExecutionResult> ExecutionResults { get; set; }
}
Хотяответ отправлен, моя система проверяет, связаны ли ответы с выводом
ExecutionResult
, хранит ID
с SendedAnswer
и Answer
(я добавил AnswerId
, и ошибка, которую я показываю ниже, отображается в выходных данных изupdate-database
после добавления новой миграции с этим идентификатором).В моем коде я проверяю SendedAnswer
с Answers
, относящимся к Question
(SendedAnswer
отправляется для разрешения одного Question
).
public class ExecutionResult
{
[Key]
public int Id { get; set; }
[ForeignKey("SendedAnswer")]
public int SendedAnswerId { get; set; }
public SendedAnswer SendedAnswer { get; set; }
[ForeignKey("Answer")]
public int AnswerId { get; set; }
public Answer Answer { get; set; }
}
Answers
таблица выглядит следующим образом:
public class Answer
{
[Key]
public int Id { get; set; }
[ForeignKey("Question")]
public int QuestionId{ get; set; }
public Question Question{ get; set; }
}
После добавления миграции с новым столбцом для хранения AnswerId
в ExecutionResult
классе, я получаю эту ошибку:
Введение ограничения FOREIGN KEY 'FK_dbo.ExecutionResults_dbo.Ответы_AnswerId 'в таблице' ExecutionResults 'могут вызывать циклы или несколько каскадных путей.Укажите ON DELETE NO ACTION или ON UPDATE NO ACTION, либо измените другие ограничения FOREIGN KEY.Не удалось создать ограничение или индекс.См. Предыдущие ошибки.
Когда я добавил эту строку в мой DbContext
(в переопределенном методе):
modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
Я получаю ошибки, что в моем IdentityUsers
отсутствуетпара IDs
и т. д. (мое наследование DbContext от IdentityDbContext<User>
).
Мой вопрос: как бороться с этой ошибкой?Когда я получу несколько каскадов на пути удаления?Для меня это выглядит нормально, потому что после удаления Answer
я хочу удалить ExecutionResult
, и это выглядит довольно очевидно, что мне нужны FK в ExecutionResult
до Answer
и SendedAnswer
.
Как сопоставить таблицу Answers
с таблицей ExecutionResult
без этой ошибки?Что я тут не так сделал?