【发布时间】:2017-05-21 17:14:29
【问题描述】:
如果使用实体框架和 SQL Server 执行 SET IDENTITY_INSERT 是否会在任何情况下无法工作,尽管它可以使用相同凭据在同一数据库上的 SSMS 中工作 (sa)
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 中运行这 2 行相同的代码时,身份插入工作正常。
使用:
- SQL Server 2014 Developer Edition(64 位)版本 13.0.4202.2,在 localhost 上运行
- 实体框架版本 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();
}
}
【问题讨论】:
标签: sql-server entity-framework