Entity Framework 4: выбранная хранимая процедура не возвращает столбцы - PullRequest
7 голосов
/ 17 декабря 2010

В моем SP я смешиваю статический SQL и динамический SQL:

declare @result table
(
 RowNum bigint,
 Id_and_Title varchar(max),
 DaysLeft int,
 cat_id int
);

затем в динамический SQL я вставляю результат в эту таблицу:

DECLARE @TSQL NVARCHAR(max);
SET @TSQL = ......

(я использую print @TSQL, поэтому я уверен, что запрос в порядке)

insert into @result
EXECUTE sp_executesql @TSQL

select * from @result

но, когда я пытаюсь импортировать taht SP в VS 2010 Ultimate, я вижу сообщение, как я упоминал в заголовке. Что вызывает это? Я много раз сталкивался с этой ошибкой, но до сих пор не знаю, что является причиной

Ответы [ 2 ]

31 голосов
/ 26 января 2011

Попробуйте добавить эту строку в начало вашей хранимой процедуры:
SET FMTONLY OFF
Вы можете удалить это после завершения импорта.

Это упомянуто в этой статье (довольно далеко), и это сработало для меня, хотя я вернулся к ADO.NET во времена, когда сильно полагаюсь на хранимые процедуры , Имейте в виду, что если ваши столбцы изменятся в зависимости от динамического SQL, ваша модель сущности сломается.

1 голос
/ 13 ноября 2013

Я не знаю точно, какой у вас тип возврата, но если у вас есть конечное (и относительно небольшое) количество типов возврата, вы можете создать определяемый пользователем тип таблицы и вернуть его.

CREATE TYPE T1 AS TABLE 
( ID bigint NOT NULL
  ,Field1 varchar(max) COLLATE Latin1_General_CI_AI NOT NULL
  ,Field2 bit NOT NULL
  ,Field3 varchar(500) NOT NULL
  );
GO

Тогда в процедуре:

DECLARE @tempTable dbo.T1

INSERT @tempTable (ID, Field1, Field2, Field3)
SELECT .....

....

SELECT * FROM @tempTable

Теперь EF должен распознавать тип возвращаемых столбцов.

...