2013-04-25 102 views
4

我有這樣的代碼是應該插入帶有標識插入的記錄上實體框架IDENTITY_INSERT ON不起作用

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 2013-04-25 13:19:48

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(); 
}