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

时间:2011-09-19 18:39:15

标签: c# sql-server-2008 entity-framework-4 temp-tables

我有一个进程,它从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”时,我可以看到该表

1 个答案:

答案 0 :(得分:4)

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

来自MSDN - CREATE TABLE(在备注部分的临时表中):

  

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

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