2013-04-25 70 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(); 
}