Соединение Entity Framework не распознает созданную временную таблицу - PullRequest
1 голос
/ 19 сентября 2011

У меня есть процесс, который берет записи из ежедневной ленты в базе данных 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

И я перевел это на ExecuteStoreCommand, используя соединение EntityFramework:

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 Ответ

4 голосов
/ 19 сентября 2011

Каждый ExecuteStoreCommand будет выполняться в разных сеансах.Таблица будет удалена, как только завершится выполнение первой команды.

Из MSDN - CREATE TABLE (в разделе «Примечания» во временных таблицах):

Глобальные временные таблицы автоматически удаляются, когда заканчивается сеанс, в котором была создана таблица, и все другие задачи перестают ссылаться на них.

Одним из решений является выполнение всех команд в одном пакете SQL, а не отдельных команд.

...