Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 设置标识\u插入不起作用_Sql Server_Entity Framework - Fatal编程技术网

Sql server 设置标识\u插入不起作用

Sql server 设置标识\u插入不起作用,sql-server,entity-framework,Sql Server,Entity Framework,如果使用实体框架和SQL Server执行,SET IDENTITY\u INSERT将不起作用,但它将使用相同的凭据从同一数据库上的SSM工作(sa) 这会引发一个错误: System.Data.SqlClient.SqlException:“当identity_insert设置为OFF时,无法在表“Albums”中插入identity列的显式值。” 但是,当我在SSMS中运行这两行代码时,标识插入工作正常 使用: SQL Server 2014开发者版(64位)13.0.4202.2版,在

如果使用实体框架和SQL Server执行,
SET IDENTITY\u INSERT
将不起作用,但它将使用相同的凭据从同一数据库上的SSM工作(
sa

这会引发一个错误:

System.Data.SqlClient.SqlException:“当identity_insert设置为OFF时,无法在表“Albums”中插入identity列的显式值。”

但是,当我在SSMS中运行这两行代码时,标识插入工作正常

使用:

  • SQL Server 2014开发者版(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();
     }
}

尝试将
SET IDENTITY\u INSERT TableName置于同一查询中,如下所示:-

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

尝试将
SET IDENTITY\u INSERT TableName置于同一查询中,如下所示:-

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

难以置信。想知道为什么会有不同。否则连接可以返回到语句之间的连接池,然后重置。您还可以显式打开DbContext.Database.Connection以强制其保持打开状态。难以置信。不知道这会有什么不同。否则,可以将连接返回到语句之间的连接池,然后重置。还可以显式打开DbContext.Database.Connection以强制其保持打开状态。