2014-02-08 3 views
0

Я сделал эти отношения в codefirst, но он показывает именно эту ошибку, которая показана на этом изображении. Я загружаю свои модели для вас, и вы можете скачать его с here [4kb]. что это за ошибка? почему это показывает это? Я хочу иметь все свои категории в таблице сообщений. так что это за способ? кто может помочь?ASP.NET Codefirst relationship

enter image description here

кто-то сказать мне, что случилось?

ответ

0

По соглашению в 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 
+0

Спасибо большое за answring. но теперь он имеет эту ошибку: оператор DELETE противоречил ограничению REFERENCE «FK_dbo.cat3_dbo.cat2_excat2». Конфликт произошел в базе данных «DbPro», таблице «dbo.cat3», в столбце «excat2». Заявление было прекращено. –

+0

Вы проверили свои коды? –

+0

Когда вы выключаете каскадное удаление, вы должны вручную убедиться, что все, что ссылается на удаляемый объект, удаляется первым или обновляется для ссылки на другое сообщение. Я не могу проверить или проверить вашу новую проблему, так как я больше не на компьютере. –

Смежные вопросы