EF Невозможно вставить явное значение для столбца идентификаторов в таблице 'X', когда для IDENTITY_INSERT установлено значение OFF - PullRequest
0 голосов
/ 25 ноября 2018

Мне нужно перенести данные из одной базы данных в другую.Ключи должны быть сохранены.Я использую EF с автоматически сгенерированным .dbmx файлом.Я прочитал много ответов на подобную проблему и следую этим советам: я включаю IDENTITY_INSERT ВКЛ точно перед вставкой записи;на диаграмме базы данных я изменил StoreGeneratedPattern на None в столбце Id (также попытался сделать то же самое с добавлением соответствующего атрибута к свойству Id).

Вот мой код:

var myEntity = new MyTable
{
    Id = 12345,
    Name = "Lorem ipsum",
    BrandId = brandId,      
};

MyContext.Database.ExecuteSqlCommand("SET IDENTITY_INSERT MY_TABLE_NAME ON");
MyContext.MyTable.Add(myEntity);
await MyContext.SaveChangesAsync(); //getting error here

Когда это делается в Management Studio, все работает просто отлично.Проблема возникает только при использовании Entity Framework.

Что выглядит странно, что я вижу в SQL Server Profiler, что команда INSERT_IDENTITY выполняется и вставка SQL идет со столбцом Id, но, похоже, не выполняется.Когда я копирую и вставляю этот SQL-запрос, он прекрасно работает.

1 Ответ

0 голосов
/ 25 ноября 2018

Проблема в том, что файлы EDMX и Designer.cs создаются перед компиляцией, когда вы генерируете схему из БД и не меняете ее.Проверка выполняется в отношении тех, которые находятся в этих файлах.Они ожидают, что свойство identif_insert будет включено, поэтому, когда вы программно отключаете его в БД, слой EF выдает исключение, с которым вы столкнулись.В сущности, ваша БД не соответствует тому, что у меня есть.

Честно говоря, передача данных из больших таблиц таким способом не предназначена для EF.Вы должны использовать Bulk Data Copy

...