Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 03.02.2021
Сообщений: 4

Дублирование значений в базе данных при создании зависимого объекта

03.08.2022, 14:49. Показов 974. Ответов 5

Студворк — интернет-сервис помощи студентам
Добрый день!
Столкнулся с проблемой дублирования записей в базе данных при сохранении объекта с вложенной структурой
Например: у меня есть 2 таблицы - менеджеры и покупатели
У каждого покупателя должен быть менеджер

Начальные данные:
Менеджеры:
Менеджер 1 Id:1
Менеджер 2 Id:2

Покупатели:
Покупатель 1 Id:1 (Менеджер 1 Id:1)
Покупатель 2 Id:2 (Менеджер 1 Id:1)
Покупатель 3 Id:3 (Менеджер 2 Id:2)

При редактировании привязки менеджера к покупателю, создается новый менеджер с теми же данными
Данные после попытки привязки другого менеджера к покупателю 2

Менеджеры:
Менеджер 1 Id:1
Менеджер 2 Id:2
Менеджер 2 Id:3

Покупатели:
Покупатель 1 Id:1 (Менеджер 1 Id:1)
Покупатель 2 Id:2 (Менеджер 2 Id:3)
Покупатель 3 Id:3 (Менеджер 2 Id:2)

Если ссылка на объект не изменяется, то новый не создается

Где может быть ошибка?

Исходный sql код:
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
CREATE TABLE [dbo].[Managers] (
    [Id]   INT            IDENTITY (1, 1) NOT NULL,
    [Name] NVARCHAR (MAX) NULL,
    CONSTRAINT [PK_dbo.Managers] PRIMARY KEY CLUSTERED ([Id] ASC)
);
 
 
 
 
 
CREATE TABLE [dbo].[Customers] (
    [Id]         INT            IDENTITY (1, 1) NOT NULL,
    [Name]       NVARCHAR (MAX) NULL,
    [STATUS]     INT            NOT NULL,
    [Manager_Id] INT            NULL,
    CONSTRAINT [PK_dbo.Customers] PRIMARY KEY CLUSTERED ([Id] ASC),
    CONSTRAINT [FK_dbo.Customers_dbo.Managers_Manager_Id] FOREIGN KEY ([Manager_Id]) REFERENCES [dbo].[Managers] ([Id])
);
 
 
GO
CREATE NONCLUSTERED INDEX [IX_Manager_Id]
    ON [dbo].[Customers]([Manager_Id] ASC);
В C# выполняется только метод SaveChanges()
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.08.2022, 14:49
Ответы с готовыми решениями:

Проблема курицы и яйца при создании зависимого от выбора меню
Столкнулся с логической проблемой. Существует класс Меню, в нем метод основное меню и подменю. Основное меню формируется из...

Ошибки при создании отчета по базе данных как исправить
Создаю отчет по базе данных, смотрел видео на ютубе ни у кого нет подобных ошибок, гооглил бесполезно. приложение работает хорошо,...

Ошибка при создании таблицы в базе данных (Не найден указанный модуль)
Здравствуйте. У меня стоит Visual studio 2010 и MS SQL Server 2008 R2 64bit. Проблема: При создании Бады данных в папке appdata - база...

5
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
03.08.2022, 14:51
Цитата Сообщение от Esdas Посмотреть сообщение
Где может быть ошибка?
Вот здесь:
Цитата Сообщение от Esdas Посмотреть сообщение
создается новый менеджер с теми же данными
Зачем два одинаковых объекта?
0
0 / 0 / 0
Регистрация: 03.02.2021
Сообщений: 4
03.08.2022, 14:56  [ТС]
Так в этом и проблема
Я привязываю к покупателю другого менеджера по ссылке, но в итоге создается менеджер с теми же данными но с другим Id
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
03.08.2022, 15:17
Цитата Сообщение от Esdas Посмотреть сообщение
Я привязываю к покупателю другого менеджера по ссылке
Так не привязывайте другого менеджера. Откуда берется этот другой менеджер, зачем второй менеджер с такими же данными, если есть оригинальный, кошерный менеджер? Его и используйте.

Добавлено через 1 минуту
Другими словами, если вам известно Id уже существующего менеджера, то можно прописать это Id у покупателя, а навигационное свойство оставить пустым.
Если хочется присвоить навигационное свойство, то тащите оригинального менеджера по известному Id из базы и привязывайте его, а не создавайте клона.
1
0 / 0 / 0
Регистрация: 03.02.2021
Сообщений: 4
03.08.2022, 15:39  [ТС]
Разобрался
Тому виной оказался legacy код, который я сразу не (исправил/заметил)
Был реализован менеджер БД через Singleton
Но внутри его функций создавались экземпляры этого класса (Не спрашивайте меня зачем. Эти функции были перенесены с другого класса)
Ко всему прочему исправилась еще одна проблема: не работал SelectedItem в ComboBox-е

Спасибо за помощь)
0
1152 / 860 / 263
Регистрация: 30.04.2009
Сообщений: 3,603
06.08.2022, 19:52
Esdas, бегите оттуда...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.08.2022, 19:52
Помогаю со студенческими работами здесь

Дублирование записей при создании новой записи .и фильтр
Здравствуйте!!! Очень нужна помощь. Пару недель назад создавала тему... Сейчас возникла такая проблема, в форме 2 при создании новой...

В экземпляре объекта не задана ссылка на объект при динамическом создании объекта
Выдается ошибка NullReferenceException в private void button2_Click(object sender, EventArgs e) { ...

Как убрать дублирование параметров в адресной строке при создании чпу?
Доброго времени суток! учусь делать чпу для сайта и возникла такая проблема... Например если я нахожусь на странице: ...

Дублирование в другую таблицу при добавлении объекта
Пишу маленький проект с многоуровневой архитектурой. Использую EF, automapper, для маппинга дто моделей. Возникла проблема при добавлении...

1С8 При определённом контрагенте 1С при выборе товара выдаёт ошибку: Обнаружено дублирование ключевых значений
1С8 УТ11 При определённом контрагенте 1С при выборе товара выдаёт ошибку: Обнаружено дублирование ключевых значений в колонках : Ссылка....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита табличной части. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru