Вставка идентификатора в EF6 Database-First

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

Код, который у меня сейчас есть, таков (реальное имя таблицы заменено на "TableName"):

using (var oldContext = new OldContext())
using (var newContext = new NewContext())
using (var transaction = newContext.Database.BeginTransaction())
{
    foreach (var item in GetConversionItems())
    {
        var newItem = Convert(item);
        newContext.TableName.Add(newItem);
    }

    try
    {
        newContext.Database.ExecuteSqlCommand("SET IDENTITY_INSERT [dbo].[TableName] ON;");
        newContext.SaveChanges();
        newContext.Database.ExecuteSqlCommand("SET IDENTITY_INSERT [dbo].[TableName] OFF");
        transaction.Commit();
    }
    catch (Exception e)
    {
        transaction.Rollback();
    }
}

и я явно назначаю значение первичному ключу.

public static TableName Convert(OldItem oldItem)
{
    ...
    newItem.ID = oldItem.CONTROL;
    ...
}

Но я получаю исключение:

"Для столбца идентификаторов в таблице" TableName "должно быть указано явное значение, если для IDENTITY_INSERT задано значение ON или когда пользователь репликации вставляет в столбец идентификаторов NOT FOR REPLICATION".

Я попытался сделать фактические вызовы базы данных (IDENTITY_INSERT и SaveChanges()) внутри цикла foreach, но проблема осталась.

Ответы, которые я смог найти для этой проблемы, были все для кода сначала.

0 ответов