2013-04-25 3 views
4

У меня есть этот код, который должен вставить запись с вкладышем идентичности наEntity Framework IDENTITY_INSERT ПО не работает

using (MCT_DB_ArchiveEntities ent = new MCT_DB_ArchiveEntities()) 
{ 
    ent.ExecuteStoreCommand("SET IDENTITY_INSERT [clicks] ON"); 
    ent.clicks.Attach(ck); 
    ent.clicks.Context.ObjectStateManager.ChangeObjectState(ck, System.Data.EntityState.Added); 
    ent.SaveChanges(); 
} 

я получаю эту ошибку.

Невозможно вставить явное значение для столбца идентификации в таблицах «клики», если для параметра IDENTITY_INSERT установлено значение OFF.

ответ

4

Не должно работать. Он работает только в том случае, если вставка идентичности включена в том же соединении, что и реальная вставка. В вашем случае можно использовать два разных соединения. Чтобы он работал, вам необходимо поддерживать собственное соединение с БД и передать его конструктору ObjectContext.

+0

Спасибо! Мне удалось заставить его работать с помощью TransactionScope – user2312219

1

В соответствии с этим предыдущим Question вам необходимо начать транзакцию вашего контекста. После сохранения изменения вы должны также скопировать столбец «Идентификация вставки» и, наконец, вам нужно будет совершить транзакцию.

using (MCT_DB_ArchiveEntities ent = new MCT_DB_ArchiveEntities()) 
using (var transaction = ent.Database.BeginTransaction()) 
{ 
    var item = new User {Id = 418, Name = "Abrahadabra" }; 
    ent.IdentityItems.Add(item); 
    ent.Database.ExecuteSqlCommand("SET IDENTITY_INSERT Test.Items ON;"); 
    ent.SaveChanges(); 
    ent.Database.ExecuteSqlCommand("SET IDENTITY_INSERT [dbo].[User] OFF"); 
    transaction.Commit(); 
} 
Смежные вопросы