Оператор INSERT конфликтует с ограничением FOREIGN KEY "FK_Employees_Departments" - PullRequest
0 голосов
/ 18 октября 2018

У меня есть база данных сотрудников и отделов, в которых они работают. У меня есть старая БД и новая БД, и у них обоих одинаковые свойства, но с разными данными.Я хочу скопировать данные из старой БД в новую БД и сохранить изменения.Но у меня есть проблема при вставке сотрудников, потому что идентификатор отдела и сотрудника является идентичностью, поэтому я не могу скопировать и вставить их.

Я добавляю эту строку:

db2.Database.ExecuteSqlCommand("SET IDENTITY_INSERT [dbo].[destEmployees] ON");

, но все еще есть ошибка

SqlException: оператор INSERT конфликтует с ограничением FOREIGN KEY"FK_Employees_Departments".Конфликт произошел в базе данных «Пункт назначения», таблица «dbo.destDepartments», столбец «Id».Заявление было прекращено.

db2.Database.ExecuteSqlCommand("SET IDENTITY_INSERT [destDepartments] ON");

foreach (var item in destDeps)
{
    db2.destDepartments.Add(item);
}

db2.SaveChanges();

db2.Database.ExecuteSqlCommand(" SET IDENTITY_INSERT[dbo].[destDepartments] OFF");

db2.Database.ExecuteSqlCommand("SET IDENTITY_INSERT [destEmployees] ON");
foreach (var item in destEmps)
{
    db2.destEmployees.Add(item);
}

db2.SaveChanges();
db2.Database.ExecuteSqlCommand("SET IDENTITY_INSERT [destEmployees] OFF");

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Поскольку существует связь (вы упомянули упоминание FK), как идентификаторы отделов в скопированных сотрудниках обновляются до правильных идентификаторов "новых" отделов?

Вреферат, вам нужно будет отслеживать «старый» идентификатор каждого отдела, связанный с «новым» идентификатором.Затем, когда вы копируете сотрудников, обновите ссылку (Идентификатор отдела) на новый Идентификатор.

0 голосов
/ 18 октября 2018

самый простой обходной путь - получить максимальный идентификатор из таблицы отделов в вашей новой БД и добавить его к идентификатору из вашей старой БД (как для отдела, так и для сотрудника), а затем выполнить вставку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...