【问题标题】:ExecuteSqlCommand returns 'invalid object name' errorExecuteSqlCommand 返回“无效的对象名称”错误
【发布时间】:2018-04-21 13:39:13
【问题描述】:

我正在尝试在 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 运行这两个命令,它们都可以正常工作。

我做错了什么?

【问题讨论】:

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


    【解决方案1】:

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

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

    select 1 as BatchID, 1 as RowID INTO #MyTempTable 
    

    INSERT INTO vs SELECT INTO

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

    【讨论】:

    • 这是解决方案,保持连接打开。当我试图理解这个问题时,我对临时表的有限理解是问题:我在 SSMS 中用不同的用户创建了一个同名的临时表,并认为它们会被共享,但它们是按用户管理的。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-23
    相关资源
    最近更新 更多