Каскадные удаления в отношении один-ко-многим - PullRequest
3 голосов
/ 28 мая 2011

У меня есть [Продукт] -1 - * - [Компонент].Поэтому, когда я удаляю продукт, я хочу, чтобы EF удалил все его компоненты.В конструкторе я выбираю отношение и устанавливаю для свойства OnDelete для End1 значение Cascade, кратность которого равна 0..1 - это создает что-то вроде:

ALTER TABLE [dbo].[Components]
ADD CONSTRAINT [FK_ProductComponent]
    FOREIGN KEY ([Product_Id])
    REFERENCES [dbo].[Products]
        ([Id])
    ON DELETE CASCADE ON UPDATE NO ACTION;

, что для меня означает, что при удалении компонентаудаление должно происходить каскадно, а соответствующий продукт также должен автоматически удаляться.

Это обратное тому, что я хотел.Поэтому я отредактировал свойство End2 для Cascade (End1 сбрасывается в None), но при попытке сохранить модель я получаю:

Error   28  Running transformation: End 'Text' on relationship 
'EF.ProductComponent' cannot have operation specified since its multiplicity 
is '*'. Operations cannot be specified on ends with multiplicity '*'.   C:\Users
\me\Documents\Visual Studio 2010\Projects\X\Website\Models\EF.edmx

, очевидно, я не понимаю этого.можно делать то, что я хочу, нет?как?

1 Ответ

3 голосов
/ 28 мая 2011

Вот хорошая ссылка, которая объясняет это подробно.Но вкратце, EF не очень надежен в обработке каскадных удалений.Вы должны установить это на конце базы данных вручную, потому что EF, вероятно, не.

http://blogs.msdn.com/b/alexj/archive/2009/08/19/tip-33-how-cascade-delete-really-works-in-ef.aspx

И вторая часть моего ответа ..... Каскадное удаление работает такчто если вы удалите родителя ... все дети также будут удалены.Удаление дочернего элемента не влияет на родительского элемента независимо от того, включен он каскадным удалением.

И да, ON DELETE CASCADE должен отображаться в ограничении внешнего ключа дочерней таблицы.

Другая ссылка схорошая информация: http://msdn.microsoft.com/en-us/library/ms186973.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...