Вставка идентификатора в 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, но проблема осталась.
Ответы, которые я смог найти для этой проблемы, были все для кода сначала.