ExecuteSqlCommand返回“无效对象名称”错误

时间:2018-04-21 13:39:13

标签: c# sql-server entity-framework entity-framework-core

我正在尝试在Entity Framework Core中执行原始SQL代码,但它返回以下错误:

  

System.Data.SqlClient.SqlException:'无效的对象名''MyTempTable'。'

我尝试运行以下命令,都失败了:

dbContext.Database.ExecuteSqlCommand(@"INSERT INTO #MyTempTable (BatchId, RowId) VALUES (1,1)");
dbContext.Database.ExecuteSqlCommand(@"INSERT INTO dbo.#MyTempTable (BatchId, RowId) VALUES (1,1)");

如果我直接从SSMS运行它们,这两个命令都可以正常工作。

我做错了什么?

1 个答案:

答案 0 :(得分:2)

INSERT INTO语句要求目标表存在 在您的代码上下文中,这是错误的,您会收到错误 当创建临时表的连接关闭时,它将被删除,因此EF完全可能关闭了创建临时表的点与尝试使用它的点之间的连接。

如果没有更多的上下文来理解代码流,您可以将查询编写为

select 1 as BatchID, 1 as RowID INTO #MyTempTable 

INSERT INTO vs SELECT INTO

MSDN上还有this document暗示可以在EF dbContext下手动打开和关闭连接