SQL 服务器 IDENTITY_INSERT 已打开,但 INSERT 查询抱怨它未打开

SQL Server IDENTITY_INSERT is on but an INSERT query complains it is not on

我正在使用 MigratorDotNet 为应用程序编写迁移,在 运行 几千次类似的插入之后,SQL 服务器抱怨:

  [migrate] SET IDENTITY_INSERT TimeOfDay ON
  [migrate] INSERT INTO TimeOfDay (id) VALUES ('312491')
  [migrate] [Warning] Cannot insert explicit value for identity column in table 'TimeOfDay' when IDENTITY_INSERT is set to OFF.
  [migrate] SET IDENTITY_INSERT TimeOfDay OFF

就在上面,有类似的插入成功:

  [migrate] SET IDENTITY_INSERT TimeOfDay ON
  [migrate] INSERT INTO TimeOfDay (id) VALUES ('312485')
  [migrate] SET IDENTITY_INSERT TimeOfDay OFF
  [migrate] SET IDENTITY_INSERT TimeOfDay ON
  [migrate] INSERT INTO TimeOfDay (id) VALUES ('312486')
  [migrate] SET IDENTITY_INSERT TimeOfDay OFF
  [migrate] SET IDENTITY_INSERT StartAndEndTime ON
  [migrate] INSERT INTO StartAndEndTime (id, Start, Finish) VALUES ('156190', '312485', '312486')
  [migrate] SET IDENTITY_INSERT StartAndEndTime OFF

TimeOfDay 中的其他列 table 默认为 null,插入是故意将它们设置为 null。

使用 Migrator.Providers.TransformationProvider.ExecuteNonQuery 执行查询。 有人知道这里发生了什么吗?

似乎解决这个问题的方法是在对 ExecuteNonQuery 的同一调用中使用 INSERT 操作调用 SET IDENTITY_INSERT 命令。以前,它们是在对 ExecuteNonQuery 的单独调用中完成的,正如 Aaron Bertrand 所说,这可能会失败,因为连接可能会在调用之间重置。