Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / LINQtoSQL: как задать атрибут DeleteRule на удаление родительской записи по внешнему ключу / 25 сообщений из 45, страница 1 из 2
29.06.2010, 07:30
    #36712321
horgh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LINQtoSQL: как задать атрибут DeleteRule на удаление родительской записи по внешнему ключу
Базу данных MSSQL рисую в дизайнере VS2010, использую LINQ.
При создании связи по внешнему ключу не понятно как задать правило на удаление/изменение родительской записи.
Пробовал вручную редактировать dbml файл, добавляя в тег <Association/> атрибуты:
Код: plaintext
DeleteRule="CASCADE" DeleteOnNull="true"
Редактирование отражается на файле, содержащем сущностные классы и DataContext, однако при вызове метода DataContext.CreateDatabase() сгенерированные запросы не содержат директив
Код: plaintext
ON DELETE CASCADE
Пройдя обратным путем, создав на сервере БД, содержащую таблицу с соответствующими связями, при помощи того же дизайнера и ServerExplorer'а в VS2010 получил dbml файл, никаких отличий от того, что было сделано вручную, найти не смог.

Подскажите, пожалуйста,
1)есть ли способ задать правила на удаление/изменение записи кроме как через dbml файл?
2)чего не хватает в описанной схеме, почему запрос, генерируемый DataContext.CreateDatabase(), не содержит указанных директив?
...
Рейтинг: 0 / 0
29.06.2010, 12:48
    #36712961
bured
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LINQtoSQL: как задать атрибут DeleteRule на удаление родительской записи по внешнему ключу
А родительскую-то зачем грохать?
...
Рейтинг: 0 / 0
29.06.2010, 13:08
    #36713034
horgh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LINQtoSQL: как задать атрибут DeleteRule на удаление родительской записи по внешнему ключу
Почему нет? Отчего не может потребоваться удалить строку таблицы (или, скажем, потеряться необходимость хранения строки) даже независимо от того имеется ли на неё ссылка по внешнему ключу?
...
Рейтинг: 0 / 0
29.06.2010, 13:12
    #36713046
bured
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LINQtoSQL: как задать атрибут DeleteRule на удаление родительской записи по внешнему ключу
1. Пересмотрите свою схему БД
2. Переопределяйте OnDeleted и там руками грохайте родителя.
...
Рейтинг: 0 / 0
29.06.2010, 13:34
    #36713119
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LINQtoSQL: как задать атрибут DeleteRule на удаление родительской записи по внешнему ключу
buredПересмотрите свою схему БД
Неужто никогда не встречались с каскадными удалениями?
...
Рейтинг: 0 / 0
29.06.2010, 13:38
    #36713134
bured
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LINQtoSQL: как задать атрибут DeleteRule на удаление родительской записи по внешнему ключу
МСУburedПересмотрите свою схему БД
Неужто никогда не встречались с каскадными удалениями?
с каскадными удалениями родителя - нет не приходилось, извините.
...
Рейтинг: 0 / 0
29.06.2010, 13:43
    #36713145
bured
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LINQtoSQL: как задать атрибут DeleteRule на удаление родительской записи по внешнему ключу
МСУ, а в чём сакральный смысл удалять родоков? В потомками ещё понятно - надо что-то делать с внешним ключом. А тут не пойму никак...
...
Рейтинг: 0 / 0
29.06.2010, 13:43
    #36713147
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LINQtoSQL: как задать атрибут DeleteRule на удаление родительской записи по внешнему ключу
buredс каскадными удалениями родителя - нет не приходилось, извините.
Хм. Прошу прощения, а, разве, суть каскадности заключается не в удалении родителя(-ей) и осталных референсных кортежей?
...
Рейтинг: 0 / 0
29.06.2010, 13:45
    #36713149
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LINQtoSQL: как задать атрибут DeleteRule на удаление родительской записи по внешнему ключу
buredМСУ, а в чём сакральный смысл удалять родоков? В потомками ещё понятно - надо что-то делать с внешним ключом. А тут не пойму никак...
Как в чём? Ну не нужна Вам запись родителя и всех его детей. Что тут еще можно сказать

P.S. Представьте ситуацию, есть родительская запись и 100 чилдов. Мне нужно 101 раз жмакать кнопку "в печь!", чтобы грохнуть весь этот мусор?
...
Рейтинг: 0 / 0
29.06.2010, 13:53
    #36713176
bured
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LINQtoSQL: как задать атрибут DeleteRule на удаление родительской записи по внешнему ключу
МСУburedс каскадными удалениями родителя - нет не приходилось, извините.
Хм. Прошу прощения, а, разве, суть каскадности заключается не в удалении родителя(-ей) и осталных референсных кортежей?
Суть каскадности в удалении осиротевших детей
...
Рейтинг: 0 / 0
29.06.2010, 13:55
    #36713183
bured
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LINQtoSQL: как задать атрибут DeleteRule на удаление родительской записи по внешнему ключу
horghПри создании связи по внешнему ключу не понятно как задать правило на удаление/изменение родительской записи.
никак.
Либо триггер какой. Либо руками в OnDeleting/OnDeleted
...
Рейтинг: 0 / 0
29.06.2010, 14:20
    #36713269
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LINQtoSQL: как задать атрибут DeleteRule на удаление родительской записи по внешнему ключу
buredhorghПри создании связи по внешнему ключу не понятно как задать правило на удаление/изменение родительской записи.
никак.
Либо триггер какой. Либо руками в OnDeleting/OnDeleted
А зачем, если можно оно может само каскадно грохнуться?
...
Рейтинг: 0 / 0
29.06.2010, 16:48
    #36713501
bured
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LINQtoSQL: как задать атрибут DeleteRule на удаление родительской записи по внешнему ключу
Да не грохаются родители вслед за детьми каскадно. Наоборот только. Поэтому у ТС и не получается.
...
Рейтинг: 0 / 0
29.06.2010, 16:54
    #36713531
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LINQtoSQL: как задать атрибут DeleteRule на удаление родительской записи по внешнему ключу
buredДа не грохаются родители вслед за детьми каскадно. Наоборот только. Поэтому у ТС и не получается.
Ничё не понял. Зачем грохать детей? :) Грохать нужно родителя, а за ним пойдут в печь и ребятишки
Мож ТС с референсами напутал.
...
Рейтинг: 0 / 0
29.06.2010, 16:55
    #36713534
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LINQtoSQL: как задать атрибут DeleteRule на удаление родительской записи по внешнему ключу
Дрюня, по-моему, Вы сами уже запутались, кто кого должен грохать
...
Рейтинг: 0 / 0
29.06.2010, 16:56
    #36713540
bured
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LINQtoSQL: как задать атрибут DeleteRule на удаление родительской записи по внешнему ключу
Ну или так, если нет желания установить другое правило для "братьев". Например обнулять внешний ключ. Я поэтому и сказал ТС пересмотреть архитектуру.
...
Рейтинг: 0 / 0
29.06.2010, 16:57
    #36713546
bured
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LINQtoSQL: как задать атрибут DeleteRule на удаление родительской записи по внешнему ключу
МСУДрюня, по-моему, Вы сами уже запутались, кто кого должен грохать
Нихуа. Перечитай весь тред. Я глаголил Истину изначально. А вот ты попутал предков и потомков децл.
...
Рейтинг: 0 / 0
29.06.2010, 16:58
    #36713549
bured
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LINQtoSQL: как задать атрибут DeleteRule на удаление родительской записи по внешнему ключу
МСУДрюня, по-моему, Вы сами уже запутались, кто кого должен грохать

ТСПри создании связи по внешнему ключу не понятно как задать правило на удаление/изменение родительской записи.
...
Рейтинг: 0 / 0
29.06.2010, 16:59
    #36713553
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LINQtoSQL: как задать атрибут DeleteRule на удаление родительской записи по внешнему ключу
Всё, врубился

Вот это

buredА родительскую-то зачем грохать?

было сказано в контексте того, что типа не нужно убивать родителя при убиении чилда.
А я понял этот вопрос, как вообще как-бы нах сносить родителя изначально. Вот и смутился.

P.S. Тогда это

МСУДрюня, по-моему, Вы сами уже запутались, кто кого должен грохать

больше про меня, чем про Вас
...
Рейтинг: 0 / 0
29.06.2010, 17:01
    #36713560
bured
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LINQtoSQL: как задать атрибут DeleteRule на удаление родительской записи по внешнему ключу
МСУ,

ну да. Я ж говорю у ТС как-то через попенс всё.
...
Рейтинг: 0 / 0
29.06.2010, 17:02
    #36713562
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LINQtoSQL: как задать атрибут DeleteRule на удаление родительской записи по внешнему ключу
bured, ага, тогда по поводу кривизны схемы БД +1
...
Рейтинг: 0 / 0
30.06.2010, 04:19
    #36714413
horgh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LINQtoSQL: как задать атрибут DeleteRule на удаление родительской записи по внешнему ключу
И все же меня не так поняли, я, видимо, некорректно выразился...родителя не требуется убивать при удалении потомка...требуется при необходимости удаления родителя каскадно удалять всех потомков, самый тривиальный вариант использования каскадного удаления записей, не более...
Проблема в том, что БД генерится при помощи Linq2SQL и ON DELETE CASCADE не попадает в генерируемые SQL запросы, хотя в dbml файле соответствующие атрибуты выставлены
...
Рейтинг: 0 / 0
30.06.2010, 04:28
    #36714414
horgh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LINQtoSQL: как задать атрибут DeleteRule на удаление родительской записи по внешнему ключу
HorghПри создании связи по внешнему ключу не понятно как задать правило на удаление/изменение родительской записи
Имелось в виду правило, которое должно выполняться при удалении\изменении родительской записи (не потомков), а следовательно - определяет, что должно происходить с потомками при удалении этого самого родителя.
Ежу ж ведь понятно, что если дочернюю запись удаляют, родителю вообще по барабану...
buredСуть каскадности в удалении осиротевших детей
...в самую точку, это и нужно, но не получается!
Все должно при вызове CreateDatabase автоматически создаваться, стало быть я не верно dbml файл составил, а что не верно абсолютно не ясно...атрибуты DeleteRule и DeleteOnNull ставил и потомку, и родителю, и одновременно обоим...один фиг LINQ генерит SQL-запрос, в котором нет ON DELETE CASCADE...хотя в файл *.designer.cs эти атрибуты проставляются
...
Рейтинг: 0 / 0
30.06.2010, 13:51
    #36715361
bured
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LINQtoSQL: как задать атрибут DeleteRule на удаление родительской записи по внешнему ключу
Кроме dbml в схеме БД правило должно стоять.
...
Рейтинг: 0 / 0
01.07.2010, 04:28
    #36716904
horgh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
LINQtoSQL: как задать атрибут DeleteRule на удаление родительской записи по внешнему ключу
О какой схеме Вы говорите?
Схема и генерируется на основе dbml файла...Любое изменение на графической форме схемы БД фактически редактируют dbml-файл...графический дизайнер ни что иное, как средство редактирования оного, да и служит для отражение структуры БД на сущностные файлы, которые фактически также генерируются на основе dbml файла...
Если речь шла о схеме БД в дизайнере, то мне не удалось найти вообще никаких средств задания подобных правил, только напрямую отредактировать dbml файл, однако ожидаемого результата не оказалось.
Вы не могли бы подсказать, где можно эти правила задавать?
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / LINQtoSQL: как задать атрибут DeleteRule на удаление родительской записи по внешнему ключу / 25 сообщений из 45, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]