Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Базы данных под .NET > Правило удаления связанных полей одной таблицы


Автор: -Mikle- 8.5.2009, 11:24
В продолжение предыдущей моей темы...

Есть таблица Category (ID PRIMARY IDENTITY(1,1) NOT NULL, ParentID NULL, Title)
У нее есть связь с другой таблицей по ID. У этой связи я использую правило удаления "Каскадом". То есть удаляя запись из Category, удаляются все записи из связанной таблицы. Это работает.

Еще у таблицы есть связь с самой собой с полем ParentID. Но я не могу создать для этой связи никакое правило.
Management Studio у меня слетел и не хочет переустанавливаться, поэтому я использую сейчас встроенные в VS средства. Там нельзя выполнить SQL запрос ALTER, но можно соответствующее правило задать через UI. Так вот это свойство (где задается правило), для этой связи, не доступно. Видимо потому что что-то не так.

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

Использую, на клиентской стороне EF. Может быть его как-то можно настроить?

Добавлено через 2 минуты и 34 секунды
Чувствую что щас придет PashaPash и наколдует  smile  решение   smile 

Автор: -Mikle- 9.5.2009, 08:41
Попробовал сделать тригер на удаление
Код

ALTER TRIGGER DeleteTrigger ON dbo.[Category]
FOR DELETE /* INSERT, UPDATE, DELETE */
AS
BEGIN
    set nocount on
    DECLARE @id int
    select @id=id from deleted
    delete from [Category] where ParnetID = @id
END


Тригер срабатывает (я пробовал другое тело для проверки) но удалять не хочет. Если удалять запись запросом, то ошибка что "ограничение same table reference". Это из-за того, что у записи есть связанные потомки. Вот если бы можно было тригер запустить до физического удаления записи, то есть сначала удалить потомков, а потом саму запись. Или временно отключить ограничение. В общем вопрос пока не решен.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)