LINQ to SQL Не удается определить тип возврата хранимой процедуры - PullRequest
2 голосов
/ 02 февраля 2012

У меня есть простая хранимая процедура, которую LINQ не может обработать.Я пробовал варианты с и без временной таблицы, но всегда получал один и тот же результат: «Не удалось обнаружить типы возврата для следующих хранимых процедур».

Вот два варианта, которые я пробовал:*

CREATE PROCEDURE GetBOQuestions @JobId int AS
BEGIN
    SELECT  Id, ExemptionCode, Prose [Question], InputType, DisplayOrder
            FROM        Assessor.FLSA.BlackOpsQuestion Q
            LEFT JOIN   Common.dbo.FName F ON F.ajblVIDP = Q.ExemptionCode
            WHERE       ajblERI = @JobId OR Q.ExemptionCode IS NULL
    RETURN 0;
END

и ...

CREATE PROCEDURE GetBOQuestions @JobId int AS
BEGIN
    DECLARE @TempTable TABLE 
    ( 
        Id VARCHAR(50), 
        ExemptionCode VARCHAR(10),
        Question VARCHAR(1000),
        InputType VARCHAR(20),
        DisplayOrder INT
    ) 
    INSERT INTO @TempTable (Id, ExemptionCode, Question, InputType, DisplayOrder)
    SELECT  Id, ExemptionCode, Prose [Question], InputType, DisplayOrder
            FROM        Assessor.FLSA.BlackOpsQuestion Q
            LEFT JOIN   Common.dbo.FName F ON F.ajblVIDP = Q.ExemptionCode
            WHERE       ajblERI = @JobId OR Q.ExemptionCode IS NULL

    SELECT Id, ExemptionCode, Question, InputType, DisplayOrder FROM @TempTable ORDER BY DisplayOrder
    RETURN 0;
END

Я пробовал это в Linq-to-SQL (.NET 4.0) и в Entity Framework.EF даже не видит SP.

Ответы [ 3 ]

3 голосов
/ 30 апреля 2015

По причинам, которые я забыл, Linq-to-SQL не сможет автоматически получить тип результата из хранимой процедуры, которая возвращает набор результатов, если вы не включите следующую строку T-SQL в свой сохраненный процесс, прежде чем поместить его в Linq. конструктор для SQL:

SET FMTONLY OFF;

Попробуйте это:

  1. Вставьте приведенный выше код сразу после оператора BEGIN в вашем proc.
  2. Если вы этого еще не сделали, удалите ВОЗВРАТ 0, как вам ранее советовали.
  3. Выполнить ALTER для вашего процесса.
  4. Обновите ваш сервер VS.NET
  5. Перетащите процесс на ваш дизайнер модели данных.
  6. Когда вы выбираете вашу процедуру в конструкторе, на панели свойств должен отображаться тип возвращаемого значения (автоматически сгенерированный тип).
  7. Сохраните модель данных.
  8. Вернитесь к сохраненному процессу и закомментируйте команду SET:

    - ВЫКЛЮЧИТЬ FMTONLY;

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

0 голосов
/ 02 февраля 2012

Linq to Sql не получит результаты напрямую из хранимой процедуры.Вместо этого будет возвращено ISingleResult.Вы должны перечислить набор результатов, чтобы получить значения, возвращаемые хранимой процедурой.

0 голосов
/ 02 февраля 2012

Линия

ВОЗВРАТ 0

является виновником в обоих случаях. Потеряйте его, и Linq сможет определить типы вашего результирующего набора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...