Это запрос:Почему эта вставка EF с IDENTITY_INSERT не работает?
using (var db = new AppDbContext())
{
var item = new IdentityItem {Id = 418, Name = "Abrahadabra" };
db.IdentityItems.Add(item);
db.Database.ExecuteSqlCommand("SET IDENTITY_INSERT Test.Items ON;");
db.SaveChanges();
}
Когда выполняется, Id
вставленной записи на новую таблицу, по-прежнему 1.
NEW: Когда я использую либо сделки, или TGlatzer-х ответ, я получаю исключение:
Явное должно быть указано значение для столбца идентификаторов в таблице «Элементы» либо когда IDENTITY_INSERT установлен в положение ON или когда пользователь репликации , вставляя в колонку идентификации NOT FOR REPLICATION.
На основании этого ответа [Entity Framework IDENTITY_INSERT ПО не работает] (http://stackoverflow.com/a/16215233/6741868), вы обратились Удостоверение Вставка на только вкратце, и он не включал вставку. Если это возможно, попробуйте создать большую строку запроса sql, начиная с '' SET IDENTITY_INSERT Test.Items ON; "', за которой следует 'INSERT INTO ...' и, наконец, '' SET IDENTITY_INSERT Test.Items OFF; "' (Все в один запрос). Или вы можете взглянуть на [TransactionScope Class] (https://msdn.microsoft.com/en-us/library/system.transactions.transactionscope (v = vs.110) .aspx). –
@KeyurPATEL Использование прямого запроса 'INSERT' действительно поражает цель ORM. Я предпочитаю вариант транзакции, но также предпочитаю встроенную транзакцию, как в ответе Ананды. – ProfK
@ProfK: Для исключения, можете ли вы обратиться к разработчику модели (edmx) и выбрать идентификатор свойства (это столбец Identity) и изменить StoreGenratedPattern на None вместо Identity? Вы должны изменить это, поскольку вы вставляете столбец идентификатора. Это должно исправить исключение. – Rangesh