实体框架连接无法识别已创建的临时表

本文关键字:创建 临时表 识别 框架 连接 实体 | 更新日期: 2023-09-27 18:08:58

我有一个过程,从Access数据库中的每日提要中获取记录,并将记录添加到sql服务器。

加载偶尔失败,所以我试图通过SQL服务器全局临时表添加,然后从该临时表更快地删除/插入。

我已经得到了以下代码,在TSQL中工作:

IF OBJECT_ID ( 'tempdb.dbo.####TempCountry' ) IS NOT NULL DROP TABLE ##TempCountry; 
SELECT * INTO ##TempCountry  FROM dbo.Country WHERE 1 = 2;
INSERT INTO ##TempCountry (CountryCode, CountryName) VALUES ('AF','AFGHANISTAN')
SELECT * FROM  ##TempCountry

我已经使用EntityFramework连接将其翻译为ExecuteStoreCommand:

using (MyEntities _ent = new MyEntities ()) {
  //Create a temp table
  try {
    _ent.ExecuteStoreCommand("IF OBJECT_ID ( 'tempdb.dbo.##TempCountry' ) IS NOT NULL DROP TABLE ##TempCountry");
    _ent.ExecuteStoreCommand("SELECT * INTO ##TempCountry FROM dbo.Country  WHERE 1 = 2");
    _ent.ExecuteStoreCommand("INSERT INTO ##TempCountry (CountryCode, CountryName, RegionCode) VALUES ('AF','AFGHANISTAN')");
  } catch (Exception ex) {
    //Generic error 
    Console.writeline("  Unknown error inserting Country: {0} - {1} ", sCountryCode, ex.Message);
  }
} //EF

当我击中最后的ExecuteStoreCommand时,代码抛出一个SqlException: "无效的对象名称'##TempCountry'。"

但是当我执行"Select * from tempdb.dbo.sysobjects"

实体框架连接无法识别已创建的临时表

时,我可以看到表

每个ExecuteStoreCommand将在不同的会话上执行。当第一个命令执行完成后,表将被删除。

从MSDN - CREATE TABLE(在临时表的备注部分下):

当创建临时表的会话结束,并且所有其他任务停止引用临时表时,全局临时表将被自动删除。

一个解决方案是在一个SQL批处理中执行所有的命令,而不是单独的命令。