|
0 / 0 / 0
Регистрация: 21.04.2019
Сообщений: 22
|
|
Cannot insert duplicate key in object. Проблема с заказами и продуктами EF core12.08.2021, 11:31. Показов 8336. Ответов 20
Метки нет (Все метки)
Есть сущность заказа и есть продукт. Связь многие ко многим (entity framework создал промежуточную таблицу, все вроде ок). Если делать начальное наполнение базы и создать заказ то все нормально, заказ создан в промежуточной таблице ID заказа и ID товара. Когда я создаю новый заказ и помещаю туда в коллекцию продуктов какой-то товар при сохранении бд пищет "Violation of PRIMARY KEY constraint "Таблица продукта". Cannot insert duplicate key in object 'Таблица продукта'. The duplicate key value is "тут ключ". Я так понимаю, что при создании нового заказа и присваивании ему продукта оно хочет создать новый продукт, который уже существует. Как пофиксить?
0
|
|
| 12.08.2021, 11:31 | |
|
Ответы с готовыми решениями:
20
RecordSet.Update, ошибка 'Cannot insert duplicate key row in object 'Product' with unique index 'IX_Product' Составление запроса INSERT . ON DUPLICATE KEY INSERT . ON DUPLICATE KEY UPDATE без инкремента |
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
|
| 12.08.2021, 13:50 | |
|
В перекрестной таблице должен быть собственный Id. Он у Вас есть ?
0
|
|
|
0 / 0 / 0
Регистрация: 21.04.2019
Сообщений: 22
|
|
| 12.08.2021, 13:52 [ТС] | |
|
Нет, там только Id продукта и Id заказа. Как его создать если это таблица созданная автоматически?
0
|
|
|
|
||
| 12.08.2021, 13:55 | ||
|
a_n_t_k, ALTER TABLE (Transact-SQL)
Добавлено через 1 минуту
0
|
||
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
|||||||
| 12.08.2021, 14:01 | |||||||
Либо откажитесь от EF (см. [4]), либо создайте базу в SSMS, а EF заставьте ее просто отобразить в модель.
0
|
|||||||
|
|
||||||
| 12.08.2021, 14:07 | ||||||
|
a_n_t_k, Добавлю к вышесказанному про руками написать классы. Вот в таком виде EF создаст именно то, что вы запишете и даже попытается добавить отношения между таблицами.
0
|
||||||
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
||
| 12.08.2021, 14:15 | ||
|
Работая через Code First, Вы будете постоянно огребать кучу проблем, т.к. у Вас, похоже, практически нет опыта проектирования СУБД.
Любые изменения в таблицах, как и удаление-добавление их, потребуют головоломных разборок с миграцией + скрипты миграции данных. Это намного сложнее и запутаннее, чем проектировать базу в SSMS, а потом "рефлекстировать" ее в модель EF. Добавлено через 4 минуты
0
|
||
|
0 / 0 / 0
Регистрация: 21.04.2019
Сообщений: 22
|
||
| 12.08.2021, 14:16 [ТС] | ||
|
MsGuns, мне кажется тут проблема в связях. Собственно как происходит добавление new Order(Products = list) (list раньше определяется в него берется продукты из бд). Возможно когда оно пытается добавить в заказ то и хочет создать новый продукт, только зачем и почему?
0
|
||
|
|
||
| 12.08.2021, 14:19 | ||
![]() Добавлено через 1 минуту a_n_t_k, Configure Many-to-Many Relationships in Code-First
0
|
||
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
|||
| 12.08.2021, 14:26 | |||
|
Имею твердое убеждение, что новичку нужно начинать проектирование БД с Клиента SQL, где все достаточно понятно интуитивно. И только освоив азы, поняв что такое "бизнес-логика сервера", "метаданные сервера", "ограничения", "первичные ключи", "идентификаторы" и т.д., можно пробовать создавать базы в коде c#.
При этом не играет никакой роли, какой именно ORM (EF, Dapper, Sql2db и т.д.) будет использоваться в моделях. Добавлено через 2 минуты Добавлено через 53 секунды
0
|
|||
|
0 / 0 / 0
Регистрация: 21.04.2019
Сообщений: 22
|
||
| 12.08.2021, 14:35 [ТС] | ||
|
0
|
||
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
||
| 12.08.2021, 14:40 | ||
|
По поводку "построенного приложения".
Любое клиентское приложение (консольное - не исключение) состоит минимум из двух частей: интерфейс + внутренняя работа с данными. Практика показывает, что наиболее ресурсоемкая (до 90%) - именно интерфейс. Ноиболее распространенная ошибка новичков - смешивать эти две части в одном коде, например в коде формы (форм). И тогда малейшая переделка "базы" приводит к тому, что нужно править код формы, а он может быть весьма обширен и запутан. Чтобы этого не происходило, весь код работы с БД выносят в отдельный юнит-класс Repository, где и пишутся все извлечения и изменения "базовых" данных в виде методов. Эти методы работают независимо от форм: они получают некоторые параметры (например значение фильтров, колонок сортировки) и возвращают класс модели либо коллекцию моделей. Либо получают модель и добавляют или изменяют ее в БД. Т.е. "формы" работают с классами моделей, нужными для отображения или ввода информации. При этом что там в базе на самом деле (какие таблицы, поля и связи), их не волнует - со всем этим разбирается репозиторий. Как результат - при внесении изменений в базу (новые таблицы, колонки, связи) правится только код репозитория. Код всех форм при этом совершенно не трогается - он просто работает на "новой" базе точно так же, как и на "старой". Добавлено через 2 минуты
0
|
||
|
|
||
| 12.08.2021, 14:53 | ||
|
У вас должен быть либо первичный ключ в этой таблице, либо уникальный, созданный на паре связующих ID Добавлено через 3 минуты a_n_t_k, и чтобы EF такое понял, нужно добавлять в классы данных аннотации, пример я показывал выше.
0
|
||
|
0 / 0 / 0
Регистрация: 21.04.2019
Сообщений: 22
|
|
| 12.08.2021, 14:56 [ТС] | |
|
Andrey-MSK, Вот такая должна быть таблица? Справа пример хранения, который создается при инициализации БД.
0
|
|
|
|
|
| 12.08.2021, 15:03 | |
|
a_n_t_k, да, только данные туда вы должны вставлять сами при формировании чего вам там надо (заказа или чего...), и данные должны вставляться в оба поля ОДНОВРЕМЕННО, одной командой INSERT.
Пары должны быть УНИКАЛЬНЫМИ!!! Один ID заказа - один ID типа товара.
0
|
|
|
0 / 0 / 0
Регистрация: 21.04.2019
Сообщений: 22
|
||||||||
| 12.08.2021, 15:10 [ТС] | ||||||||
0
|
||||||||
|
|
||
| 12.08.2021, 15:20 | ||
![]() Это означает то, что товар в заказе не повторяется, а присутствует там только один раз, и таких разных товаров может быть хоть 100500. Ваша ошибка как раз и выдает то, что такая пара уже существует: 1. Заказ 001 - Ботинки 001 2. Заказ 001 - Зонтики 003 3. Заказ 001 - Туфли 006 4. Заказ 001 - Ботинки 001 -> ваша ошибка об уникальности ключа Понятно теперь? Добавлено через 6 минут a_n_t_k, всё это от того, что вы не разобрались в предмете с которым работаете. Предмет -> СУБД. Если бы вы четко понимали как работает СУБД, то этот вопрос бы даже не возник
0
|
||
|
0 / 0 / 0
Регистрация: 21.04.2019
Сообщений: 22
|
||
| 12.08.2021, 15:29 [ТС] | ||
|
0
|
||
|
|
|
| 12.08.2021, 15:39 | |
|
0
|
|
|
0 / 0 / 0
Регистрация: 21.04.2019
Сообщений: 22
|
|
| 12.08.2021, 15:43 [ТС] | |
|
0
|
|
| 12.08.2021, 15:43 | |
|
Помогаю со студенческими работами здесь
20
Insert into в один столбец ON DUPLICATE KEY UPDATE Некорректная работа команды INSERT INTO ON DUPLICATE KEY UPDATE Violation of Primary key constraint 'PK_otdel'. Cannot insert dupllicate key in object 'dbo.otdel'. DUPLICATE KEY ON DUPLICATE KEY UPDATE Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Автоматическое создание документа при проведении другого документа
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.
Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
|