2012-03-05 4 views
1

У меня есть две хранимые процедуры. Один (test_proc_outside) выполняет вызов второго (test_proc_inside).LINQ to SQL - Хранимые вложенные процедуры

Когда я создаю визуальный файл LINQ to SQL .dbml визуально, перетаскивая обработанный файл test_proc_outside, сгенерированный класс (test_proc_outsideResult) фактически содержит моделирование для набора результатов внутреннего proc (test_proc_inside).

Вот код для внешней хранимой процедуры (test_proc_outside):

CREATE PROCEDURE [dbo].[test_proc_outside] 
@test1 int = 1, 
@test2 int = 2, 
@test3 int = 3 

AS НАЧАТЬ - SET NOCOUNT ON добавляется для предотвращения дополнительных наборов результатов из - мешая ЗЕЬЕСТ. SET NOCOUNT ON;

-- The result of this proc call gets modelled into DBML: 
EXEC dbo.test_proc_inside @test1, @test2 

-- This SELECT statement does NOT get modelled into DBML: 
SELECT @test1 AS Test1, 
     @test2 AS Test2, 
     @test3 AS Test3 

END GO

Вот код внутри хранимая процедура (test_proc_inside):

CREATE PROCEDURE [dbo].[test_proc_inside] 
-- Add the parameters for the stored procedure here 
@test1 int = 1, 
@test2 int = 2 

AS НАЧАТЬ - SET NOCOUNT ON добавляется для предотвращения дополнительных наборов результатов из - вмешательство в инструкции SELECT. SET NOCOUNT ON;

-- This is the result set that gets modelled by the DBML file: 
SELECT @test1 AS Test1_Inside, 
     @test2 AS Test2_Inside 

КОНЕЦ ГО

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

Если я вместо этого вменяю вызов proc в функцию, я получаю желаемую модель (test_proc_outside).

Есть ли параметр конфигурации, чтобы сообщить DBML-файлу о создании класса для набора результатов во внешнем proc (test_proc_outside) и не беспокоиться о внутренних результатах test_proc_inside?

Спасибо заранее,

Craig

ответ

0

Я думаю, что это возможно, чтобы получить результат, который вы хотите с L2S, но вы также должны получить все другие результаты. Вы не можете сделать это с дизайнером, вам придется сопоставить sproc, расширив DataContext в частичном классе с помощью метода, который возвращает экземпляр интерфейса IMultipleResults. Смотрите этот блог:

http://blogs.msdn.com/b/dinesh.kulkarni/archive/2008/05/16/linq-to-sql-tips-7.aspx

Кроме того, если хранимая процедура возвращает набор результатов, которые не отображаются на сущность в модели L2S, вам нужно создать специальные типы для представления этих результатов вручную путем определения они в коде аналогичным образом L2S обычно генерирует типы для результатов хранимой процедуры в свой designer.cs.

Смежные вопросы