Linq to SQL (конструктор) не понимает хранимую процедуру - PullRequest
2 голосов
/ 05 января 2010

Почему разработчик Linq to SQL не может понять следующую хранимую процедуру и правильно импортировать ее?

CREATE PROCEDURE dbo.MartinTest
    @parameter1 INTEGER

AS
    SET NOCOUNT ON

    SELECT C1, C2, C3 
    INTO #myTempTable
    FROM MyTable

    SELECT C1, C2, C3
    FROM MyOtherTable INNER JOIN #myTempTable ON ....

    RETURN

Когда я использую конструктор для импорта этой хранимой процедуры, он устанавливает тип возвращаемого значения как «none», даже если SP явно возвращает одну или несколько строк данных.

Принимая во внимание, что если я уберу первый оператор выбора и вместо этого просто верну содержимое исходной таблицы ...

CREATE PROCEDURE dbo.MartinTest
    @parameter1 INTEGER

AS
    SET NOCOUNT ON

    SELECT C1, C2, C3
    FROM MyTable

    RETURN

... дизайнер работает нормально и определяет правильный тип возвращаемого значения.

Кстати: я знаю, что могу вручную закодировать вызов хранимой процедуры, поэтому я не ищу обходной путь, меня больше интересует, является ли это ошибкой в ​​конструкторе для Linq to SQL или это что-то другое. Я использую VS2008 SP1.

Спасибо.

Ответы [ 2 ]

4 голосов
/ 05 января 2010

Технически это не проблема конструктора Linq to SQL, это проблема SQL Server. Дизайнер Linq to SQL использует SET FMTONLY ON, чтобы получить информацию о наборе результатов хранимой процедуры. К сожалению, этот метод не работает, если хранимая процедура имеет временную таблицу.

В первых нескольких комментариях в блоге ScottGu .

есть небольшая информация об этом
1 голос
/ 27 января 2010

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

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