在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中运行这两条相同的行时,身份插入工作正常。
使用:
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();
}
}
答案 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')");