实体框架IDENTITY_INSERT ON不起作用

时间:2013-04-25 10:02:31

标签: c# entity-framework

我有这个代码,应该在

上插入带有标识插入的记录
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时,无法在表'click'中为identity列插入显式值。

2 个答案:

答案 0 :(得分:4)

它不应该工作。仅当在与真实插入相同的连接上打开标识插入时,它才有效。在您的情况下,可以使用两个不同的连接。要使其工作,您必须维护自己的数据库连接并将其传递给ObjectContext的构造函数。

答案 1 :(得分: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();
}