Я очищаю колени на Платформе Объекта 4 и сталкиваюсь с небольшой проблемой.
У меня есть некоторые хранимые процедуры, которые я вытягиваю в свой EDMX. Когда я создаю составные типы из этих procs, EF не имеет никакой проблемы при получении информации столбца. Кроме одного места. Будучи озадаченным некоторое время, я выясняю, что это была моя временная таблица, заполняемая, который вызывает проблему. На самом деле это просто называет ВСТАВКУ во временную таблицу, которая вызывает проблему. Я на самом деле не заполняю его ни с какой информацией.
В то время как я знаю, что могу вручную создать составной тип, затем отображают функцию на тот тип, я хотел бы смочь просто позволить EF заботиться о нем для меня. Кто-либо знает то, что я делаю неправильно?
Ниже образец proc, который не работает. Выполните это в DB и добавьте proc к Вам EDMX. Затем попытайтесь получить информацию столбца на экране "Add Function Import". Ничто не возвращается. Прокомментируйте ВСТАВКУ к временной таблице и получите информацию столбца, и она работает.
Спасибо, Steve
CREATE PROCEDURE dbo.TestProc
AS
SET NOCOUNT ON
CREATE TABLE #TempTable(
StartDate datetime
)
INSERT INTO #TempTable
SELECT null
DROP TABLE #TempTable
SELECT 1 AS ReturnValue
SET NOCOUNT OFF
GO
Несколько вещей, которые стоит попробовать.
Попробуйте использовать следующую сохраненную процедуру (непроверено ... просто подумайте вслух ...)
CREATE PROCEDURE dbo.Foo
AS
SET NOCOUNT ON
DECLARE @ResultTable TABLE (SomeId INTEGER)
INSERT INTO @ResultTable
SELECT DISTINCT Id AS Identity -- Or u can rename this field to anything...
FROM SomeExistingTableWhichHasAnIdentityField
GO
Попробуйте это и посмотрите, обновится ли мастер сейчас.
-
Хорошо ... когда разработчик / мастер EF / кто-то еще не может ТОЧНО выяснить, что должен возвращать мой сохраненный процесс, я обычно делаю следующее: -
/ * / *
комментарий out ВСЕ после определения процедуры. например ..
ALTER PROCEDURE dbo.Foo
(
Bar1 INT,
Bar2 TINYINT,
... // whatever u have as your optional input arguments //
)
AS
SET NOCOUNT ON
/*
.... every thing in here is commented out
*/
GO
Теперь ... 3. Добавьте принудительный ложный возврат в сохраненную процедуру, которая (более или менее) просто определяет структуру / поля вывода.
например ..
ALTER PROCEDURE dbo.Foo
(
Bar1 INT,
Bar2 TINYINT,
... // whatever u have as your optional input arguments //
)
AS
SET NOCOUNT ON
SELECT 1 AS Id, 1 AS UserId, 1 AS SomeOtherId,
CAST('AAA' AS NVARCHAR(350)) AS Name,
-- etc etc etc..
/*
.... every thing in here is commented out
*/
GO
а затем ...
... и теперь EF обновлен и не знает, что мы изменили структуру вашей сохраненной процедуры.
win :)
это работает для тебя?