SET IDENTITY_INSERT无效

时间:2017-05-20 19:48:08

标签: sql-server entity-framework

SET IDENTITY_INSERT使用实体框架和SQL Server执行时是否有任何情况,尽管它可以使用相同的凭据(sa)从同一数据库中的SSMS工作

System.Data.Entity.Core.Objects.ObjectContext oContext = ((IObjectContextAdapter)dbContext).ObjectContext;

ExecuteSql(oContext, "SET IDENTITY_INSERT dbo.Albums ON");
ExecuteSql(oContext, "INSERT INTO dbo.Albums ([Id], [Name], [Description]) VALUES (-2, 'album1', 'album1')");

这会引发错误:

  

System.Data.SqlClient.SqlException:'无法为表格中的标识列插入显式值'相册'当IDENTITY_INSERT设置为OFF时。

但是,当我在SSMS中运行这两条相同的行时,身份插入工作正常。

使用:

  • 在localhost上运行的SQL Server 2014 Developer Edition(64位)版本13.0.4202.2
  • 实体框架版本6.0.0.0 *

ExecuteSQL方法如下:

public static void ExecuteSql(System.Data.Entity.Core.Objects.ObjectContext c, string sql)
{
     var entityConnection = (System.Data.Entity.Core.EntityClient.EntityConnection)c.Connection;

     DbConnection conn = entityConnection.StoreConnection;
     ConnectionState initialState = conn.State;

     using (DbCommand cmd = conn.CreateCommand())
     {
         cmd.CommandText = sql;
         cmd.ExecuteNonQuery();
     }
}

1 个答案:

答案 0 :(得分:2)

尝试将SET IDENTITY_INSERT TableName ON置于同一个查询中,如下所示: -

ExecuteSql(oContext, "SET IDENTITY_INSERT dbo.Albums ON; 
INSERT INTO dbo.Albums ([Id], [Name], [Description]) 
VALUES (-2, 'album1', 'album1')");