По соглашению в Entity Framework удаление объекта удалит все, что связано с этим противом. В вашем случае это означает, что удаление cat1 удалит все cat2, cat3 и post, которые ссылаются на cat 1.
Ваша проблема возникает из-за того, что вы указываете WillCascadeOnDelete (true) на карте сообщений, что вы также хотите, чтобы сообщение автоматически вызывало удаление cat1, cat2 и cat3, которые ссылаются на сообщения, которые могут вызвать частичную или полную очистку базы данных (сообщения удаляют категории, удаляющие записи, удаляющие категории и т. д.).
Чтобы исправить это, вам необходимо удалить ваши изображения WillCascadeOnDelete (true) из postMap.
this.HasRequired(t => t.cat1)
.WithMany(t => t.posts)
.HasForeignKey(d => d.excat1);
this.HasRequired(t => t.cat2)
.WithMany(t => t.posts)
.HasForeignKey(d => d.excat2);
this.HasRequired(t => t.cat3)
.WithMany(t => t.posts)
.HasForeignKey(d => d.excat3);
Вам нужно добавить WillCascadeOnDelete (ложь) в категории выше дерева к вашему cat2Map и cat3Map.
cat2Map:
this.HasRequired(t => t.cat1)
.WithMany(t => t.cat2s)
.HasForeignKey(d => d.excat1)
.WillCascadeOnDelete(false);
cat3Map:
this.HasRequired(t => t.cat1)
.WithMany(t => t.cat3s)
.HasForeignKey(d => d.excat1)
.WillCascadeOnDelete(false); <-- Add this
this.HasRequired(t => t.cat2)
.WithMany(t => t.cat3s)
.HasForeignKey(d => d.excat2)
.WillCascadeOnDelete(false); <-- Add this
Спасибо большое за answring. но теперь он имеет эту ошибку: оператор DELETE противоречил ограничению REFERENCE «FK_dbo.cat3_dbo.cat2_excat2». Конфликт произошел в базе данных «DbPro», таблице «dbo.cat3», в столбце «excat2». Заявление было прекращено. –
Вы проверили свои коды? –
Когда вы выключаете каскадное удаление, вы должны вручную убедиться, что все, что ссылается на удаляемый объект, удаляется первым или обновляется для ссылки на другое сообщение. Я не могу проверить или проверить вашу новую проблему, так как я больше не на компьютере. –