|
0 / 0 / 0
Регистрация: 22.05.2017
Сообщений: 37
|
|
DB контекст не формирует запрос на обновление первичного ключа17.01.2025, 22:42. Показов 4662. Ответов 41
Метки нет (Все метки)
При попытке сохранения изменений значения первичного ключа ошибка. (EF NET 8)
The property 'ТАБЛИЦА.ПОЛЕ_В_ПЕРВИЧНОМ_КЛЮЧЕ' is part of a key and so cannot be modified or marked as modified. To change the principal of an existing entity with an identifying foreign key, first delete the dependent and invoke 'SaveChanges', and then associate the dependent with the new principal. Например, есть таблица тарифов (ключ - id) и история ставок тарифов (ключ id, dstart) . У истории ставок нет дочерних таблиц. При редактировании в таблице истории ставок существующей записи поля dstart (часть первичного ключа) и сохранении в SaveChanges выходит выше указанное предложение. Как то глупо получается. Надо удалить запись и ввести новую с новой датой. Образно говоря оператор внес информацию, сохранил ее, потом увидел, что ошибся в дате, пытается изменить дату, но ему предлагается удалить все что он ввел и внести информацию заново. Кто что делает в таком случае?
0
|
|
| 17.01.2025, 22:42 | |
|
Ответы с готовыми решениями:
41
Обновление таблицы с сохранением первичного ключа Обновление первичного ключа через хранимую процедуру Обновление первичного ключа после выполнения запроса |
|
|
||
| 20.01.2025, 11:22 | ||
|
0
|
||
|
0 / 0 / 0
Регистрация: 22.05.2017
Сообщений: 37
|
||||
| 20.01.2025, 11:29 [ТС] | ||||
|
Я же уже написал, что логика таблицы хранить историю определенных показателей. В этом контексте изменение пользователем части первичного ключа вполне допустимо. От того что я сделаю искусственный ключ, а текущий примари вынесу в просто уникальный ничего не поменяется. Пользователь также не сможет внести внести два одинаковых значения составного ключа. Суть в том, что удалив запись и создав ее заново - так можно, а просто изменить часть ключа - так нельзя. Но по факту результат получается одним и тем же. Добавлено через 2 минуты Добавлено через 57 секунд
0
|
||||
|
|
|
| 20.01.2025, 11:36 | |
|
0
|
|
|
|
||
| 20.01.2025, 11:42 | ||
|
0
|
||
|
4695 / 2702 / 735
Регистрация: 02.08.2011
Сообщений: 7,236
|
||
| 20.01.2025, 11:45 | ||
|
sijuiem, удалите старую запись и создайте новую с нужными значениями ключа. Делов то.
Добавлено через 1 минуту Поэтому изменение идентификатора нежелательно. Паспорт вы тоже раз в месяц меняете? - аналогия.
0
|
||
|
|
||
| 20.01.2025, 11:46 | ||
|
0
|
||
|
0 / 0 / 0
Регистрация: 22.05.2017
Сообщений: 37
|
||
| 20.01.2025, 11:55 [ТС] | ||
|
0
|
||
|
4695 / 2702 / 735
Регистрация: 02.08.2011
Сообщений: 7,236
|
||
| 20.01.2025, 11:59 | ||
|
Любите секас сидя - занимайтесь
0
|
||
|
0 / 0 / 0
Регистрация: 22.05.2017
Сообщений: 37
|
|||
| 20.01.2025, 12:10 [ТС] | |||
|
Малой кровью - это невидимое удаление и вставка копии удаленной записи. Добавлено через 3 минуты
0
|
|||
|
|
|||||||
| 20.01.2025, 12:15 | |||||||
|
Добавлено через 4 минуты sijuiem, Вот один из примеров как меняется структура таблицы на рабочей БД
0
|
|||||||
|
4695 / 2702 / 735
Регистрация: 02.08.2011
Сообщений: 7,236
|
||
| 20.01.2025, 12:24 | ||
|
EF вам не дураки писали, есть свои ограничения, конечно, но все делается по канонам.
0
|
||
|
0 / 0 / 0
Регистрация: 22.05.2017
Сообщений: 37
|
|
| 20.01.2025, 12:51 [ТС] | |
|
0
|
|
|
4695 / 2702 / 735
Регистрация: 02.08.2011
Сообщений: 7,236
|
|||
| 20.01.2025, 12:57 | |||
|
Добавлено через 1 минуту С большим количеством техдолга. Намеки на это мы уже увидели.
0
|
|||
|
0 / 0 / 0
Регистрация: 22.05.2017
Сообщений: 37
|
|
| 20.01.2025, 13:01 [ТС] | |
|
0
|
|
|
|
||||
| 20.01.2025, 13:13 | ||||
|
Добавлено через 1 минуту
0
|
||||
|
14733 / 9507 / 1363
Регистрация: 21.01.2016
Сообщений: 35,869
|
|
| 24.01.2025, 08:40 | |
|
0
|
|
|
|
|
| 24.01.2025, 08:43 | |
|
0
|
|
|
14733 / 9507 / 1363
Регистрация: 21.01.2016
Сообщений: 35,869
|
|
| 24.01.2025, 09:07 | |
|
Andrey-MSK, диалект это не наворот. Это диалект. Похожее, но не точно написание одного и того же.
1
|
|
|
|
|||||
| 24.01.2025, 09:57 | |||||
|
Не по теме:
Навыгребал из-за них кучу проблем. Самая элементарная: БД разростается, всё скинули на каскадное удаление. Через некоторое время прилетает баг "удаление занимает дофига времени", ещё через время уже прилетает критикал "удаление падает с таймаутом". Отдельный челендж, когда это удаление критично и нельзя просто пометить "удалено" и забить. Проблема номер два: ты не чекаешь что удаляешь. Т.е. удалил запись ТаблицаА, а там потянулу записи из ТаблицыВ, которые нельзя удалять (например не хватает прав). Как ты про это узнаешь? Правильно, когда прилетит внеочередной баг от QA месяца так через три-четыре. - какие таблицы, прям скрипт создания (не обязательно полный, только ключевые моменты) - краткое описание что храниться в таблице и зачем - краткое описание что вы хотите выполнить (я так понимаю поменять запись в истории?) Потому как "история" и "один-к-одному" у меня в голове не складываются. Обычно есть таблица с элементами, и таблица истории изменений, которая ссылается на таблицу элементов "один-ко-многим". Причем за правило береться что ЛЮБОЕ изменение порождает новую запись в таблице истории, вне зависимости от того правили критичную инфу или не очень. Поэтому либо не правильно организовано, либо не понял задум.
0
|
|||||
|
0 / 0 / 0
Регистрация: 22.05.2017
Сообщений: 37
|
|||||||
| 28.01.2025, 14:01 [ТС] | |||||||
Пользователь при вводе новой записи в историю тарифа (в таблицу TARIFFDETAIL) ошибается с датой и сохраняет запись. Затем хочет исправить ее на правильную дату. В ADO NET - пожалуйста - нет проблем. В EF NET Core - ошибка. Сначала удали, а затем введи заново. Конечно можно сделать искусственный ключ для TARIFFDETAIL и ограничение на уникальность для связки ID_TARIFF,DSTART, но что это дает физически, кроме лишнего поля и еще одного индекса? А еще при этом нельзя будет сделать лаконичный Context.TARIFFDETAIL.Find(ID_TARIFF,DSTA RT)
0
|
|||||||
| 28.01.2025, 14:01 | |
|
Запрос на создание таблицы. Установка первичного ключа. Как выглядит SQL запрос на получение первичного ключа с таблицы Тип сущности требует определения первичного ключа, но ключа в бд нет Получение первичного ключа Автоинкремент первичного ключа Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Сегодня суббота, 22.08.2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины.
zorxor 22.08.2026
Сегодня суббота, 22. 08. 2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины. Кто Я, откуда Я пришел и куда Я иду? Эти вопросы не оставляют меня ни на секунду. Жизнь на планете Земля. . .
|
Жизня: рисунок укладки багажа, сделанный клодом
anaschu 21.08.2026
Сделал 15 снимков, он по снимкам сделал схему.
|
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства.
Жизнь действительно предъявляет каждому. . .
|
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
|
|
Лето уходит
kumehtar 17.08.2026
|
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
|
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины".
За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html
Задача: . . .
|
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
|