实体框架连接无法识别已创建的临时表
本文关键字:创建 临时表 识别 框架 连接 实体 | 更新日期: 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批处理中执行所有的命令,而不是单独的命令。