|
0 / 0 / 0
Регистрация: 28.10.2021
Сообщений: 33
|
|||||||||||
При удалении записи и попытке удалить связанные с ней записи в другой таблице возникает ошибка12.02.2022, 08:05. Показов 2379. Ответов 17
Метки нет (Все метки)
Здравствуйте у меня есть 2 таблицы в БДSalonMassaga. В первой таблице (Clients) поля IDClients, LastName, FirstName, Patronymica. Во второй (ReceptionOnline) поля IDReception (Первичный ключ), IDClients, IDWorkers, IDObonement, DateReception, TimeReception. Мне нужно чтобы при удалении клиента из базы удалялись и все его записи на приём они в таблице Reception. Но когда я пытаюсь это сделать возникает ошибка "При обновлении записей возникла ошибка. дополнительные сведения приведены в внутреннем исключении"
подключение к БД проходит через метод который находить в том же месте что и модель бд
0
|
|||||||||||
| 12.02.2022, 08:05 | |
|
Ответы с готовыми решениями:
17
ошибка при удалении записи в таблице DataGridView При удалении записи в дочерней таблице она пытается удалить запись в родительской. Удаление или изменение записи невозможно, в таблице имеются связанные записи |
|
14313 / 9393 / 1355
Регистрация: 21.01.2016
Сообщений: 35,427
|
||
| 12.02.2022, 08:40 | ||
Сообщение было отмечено ArchSeib как решение
РешениеSQL, FOREIGN KEY, CASCADING.
1
|
||
|
|
||||||||||||
| 14.02.2022, 08:37 | ||||||||||||
|
Лучше удалить вначале записи из подчинённой таблицы
1
|
||||||||||||
|
14313 / 9393 / 1355
Регистрация: 21.01.2016
Сообщений: 35,427
|
|
| 14.02.2022, 08:40 | |
|
1
|
|
|
|
|
| 14.02.2022, 08:45 | |
|
Usaga, Можно удалить всё оченно быстро, сервер даже ни о чём не спросит
А тут будет хоть какая-то защита и разработчик чётко будет знать что делает ![]() Добавлено через 1 минуту Каскады это возможность из серии TRUNCATE
1
|
|
|
14313 / 9393 / 1355
Регистрация: 21.01.2016
Сообщений: 35,427
|
|
| 14.02.2022, 08:48 | |
|
Andrey-MSK, ну, так когда разработчик добавляет каскад он же тоже понимает, что делает. Разве нет?
1
|
|
|
|
|
| 14.02.2022, 08:56 | |
|
Usaga, Опытный понимает, а вот начинающий не всегда. Потому для него лучше такую возможность сервера не использовать
![]() Я так думаю (с) ...
1
|
|
|
14313 / 9393 / 1355
Регистрация: 21.01.2016
Сообщений: 35,427
|
|
| 14.02.2022, 10:48 | |
|
Andrey-MSK, лучше использовать и при этом с головой) Видел я проект, который без каскадов был написан джунами... Сколько же там кода мусорного из-за этого было.
1
|
|
|
|
||
| 14.02.2022, 10:53 | ||
1
|
||
|
14313 / 9393 / 1355
Регистрация: 21.01.2016
Сообщений: 35,427
|
|
| 14.02.2022, 10:55 | |
|
Andrey-MSK, да без разницы где код, на C# или в базе. Суммарно один чёрт будет больше, чем нужно. Практический смысл сего в чём?) С таким же успехом давайте и от C# откажемся с его GC. Будем на Си malloc'и вызывать) Что уж)
2
|
|
|
|
|
| 14.02.2022, 11:06 | |
|
Usaga, Я просто решил предостеречь ТС про эту возможность, а так, пусть сам решает
![]() Но если ошибётся, да еще и на боевом сервере, то хана данным, сервер по всей цепочке всё молча вытрет и усё...
0
|
|
|
14313 / 9393 / 1355
Регистрация: 21.01.2016
Сообщений: 35,427
|
|
| 14.02.2022, 11:09 | |
|
Andrey-MSK, если он на такое будет способен, без тестирования на своей машине, то его никакие убранные каскады не спасут от похеривания данных) Такой человек найдёт как пустить всё под откос...
1
|
|
|
0 / 0 / 0
Регистрация: 28.10.2021
Сообщений: 33
|
|
| 14.02.2022, 13:18 [ТС] | |
|
Спасибо большое, почитал и вроде разобрался. Как я понял это нужно в самой бд делать, а не в VS
Добавлено через 10 минут Я использую Entity framework. И пока искал про каскадное удаление увидел что Entity framework автоматически использует каскадное удаление. Так может ли быть ошибка в том что я пытался удалить то что он и сам мог удалить и из-за этого могла быть ошибка?
0
|
|
|
14313 / 9393 / 1355
Регистрация: 21.01.2016
Сообщений: 35,427
|
|
| 14.02.2022, 13:22 | |
|
ArchSeib, он автоматически такое проделывает только для загруженных сущностей. А это сильно не "автоматически". И каскадирование происходит на уровне СУБД, а не ORM.
0
|
|
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
|
| 14.02.2022, 13:44 | |
|
Каскадные удаления (изменения) - штука как удобная, так и очень опасная.
С удобством понятно, с опасностью нужны пояснения. Главным образом, опасность утери данных, особенно в "этажерках" из более, чем двух таблиц, заключается в случайных или ошибочных действиях как пользователя (спешил, нажал кнопки автоматически), так и программиста, который решил "подчистить" базу из Клиента (не приложения). И то, и другое, случается достаточно часто, - это опыт, и не только мой. На исправление подобных "ошибок" уходит масса времени и нервов и хорошо, если есть свежий бэкап и можно на время восстановления данных отключить всех от сервера. А если нет ? Или бэкпапа или нельзя всем дать команду "Стоять, не двигаться !" ?. Тогда нужно копать в логах, ручками строить запросы на вставки убитых записей. Или заставить пользователя ввести по новой данные с "бумажных" документов. Если, конечно, они есть А если брать серьезные системы типа ERP/MRP, то там есть цепочки операций (проводок) и восстановлением только самого документа дело не ограничится. Придется откатывать все операции, связанные с этим документом, а потом опять их выполнять. Поэтому каскады опытными разрабами СУБД используются редко. Что же касается "мусорного" кода. "мусорно" можно писать абсолютно всегда и везде. Правильно написанный код удаления из связанных таблиц не может быть длинным и запутанным. Но в целом, конечно, полностью блокировать "ошибки от дурака" невозможно. Есть каскады или нет их, "обезьяны с гранатой", увы, находятся везде. Для борьбы с ними существует система журналирования и админсредства (вплоть до увольнения - в моей практике были такие случаи)
0
|
|
|
0 / 0 / 0
Регистрация: 28.10.2021
Сообщений: 33
|
|
| 14.02.2022, 15:19 [ТС] | |
|
С удалением я разобрался но теперь мне нужно наоборот чтобы при удалении записи из главной таблицы запись в дочерней не менялась. Как я понял это должно делать свойство NO ACTION, но я не могу найти как его использовать
0
|
|
|
|
|||||||
| 14.02.2022, 15:23 | |||||||
|
Если нужно оставить все записи в подчинённой таблице, то перед удалением записи из главной нужно обнулить ID в подчиненной
0
|
|||||||
|
0 / 0 / 0
Регистрация: 28.10.2021
Сообщений: 33
|
|
| 15.02.2022, 08:01 [ТС] | |
|
Ясно спасибо
0
|
|
| 15.02.2022, 08:01 | |
|
Помогаю со студенческими работами здесь
18
При удалении учащихся из журнала удаляет все связанные записи с ним в остальных таблицах Как удалить записи из таблицы связанные с другой таблицей?
Ошибка при удалении записи
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2.
Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники".
В. . .
|
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии.
. . .
|
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2.
При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
|
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут.
https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc
Первый документ красиво выглядит, но без схемы.
Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
|
|
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере".
Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
|
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти".
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2.
В качестве источника данных. . .
|
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер
Написал заготовку:
dotnet new console --aot -o UrlHandler
var items = args. Split(":");
var tag = items;
var id = items;
var executable = args;. . .
|
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3.
Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
|