A Template
может иметь ноль или много Document
и ноль или много MetaIndex
. Document
может иметь ноль или более Index
и MetaIndex
также может иметь ноль или более Index
:Как решить несколько каскадных путей с кодом сущности сперва
Это представляет потенциальную проблему каскада, так как удаление Template
удалит его Document
(что нормально); удаление Document
удалит его Index
, что тоже нормально. Но при удалении Template
попробуйте удалить MetaIndex
(который также удалит Index
) появится проблема (цикл).
Я понимаю проблему. Я думаю, что способ решить это - указать, что при удалении шаблона удаляются его документы и индексы его документа, а также метаиндексы, связанные с шаблоном. Но что metaindices не каскадируют, удаляют связанные с ним индексы, поэтому циклы не появляются.
Поиск здесь для potential solution, я попытался это:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<MetaIndex>().HasMany<Index>(m => m.IndicesEnteros).WithRequired().WillCascadeOnDelete(false);
}
Но это не работает:
Вводя ограничение внешнего ключа на таблицу может вызвать циклов или несколько путей порогами. Укажите ON DELETE NO ACTION или ON UPDATE NO ACTION или измените другие ограничения FOREIGN KEY. Не удалось создать ограничение. См. Предыдущие ошибки.
Кажется, что вы пытаетесь установить ограничение при указании WithRequired(), но тогда вы установите для каскада значение false. В событии вы удаляете зависимый элемент db, не обновляете другой элемент, и ограничение будет нарушено. Чтобы решить эту проблему, попробуйте включить каскад. – Gustavo
@GustavoSuarez, каскад именно то, что я пытаюсь удалить. Неважно, если я использую WithOptional() вместо этого, поведение будет таким же. –