2012-03-05 7 views
1

2つのストアドプロシージャがあります。 1つ(test_proc_outside)が2番目の呼び出し(test_proc_inside)を呼び出します。LINQ to SQL - ストアドプロシージャのネスト

私のtest_proc_outsideストアドプロシージャをドラッグして視覚的に新しいLINQ to SQL .dbmlファイルを作成すると、生成されたクラス(test_proc_outsideResult)に実際に内部proc(test_proc_inside)結果セットのモデリングが含まれます。ここ

は、外部ストアドプロシージャ(test_proc_outside)のコードである: AS

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

をBEGIN - SELECT文を妨害 - 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)のコードである: AS

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

をBEGIN - 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 

END GO

はDBML生成ストアドプロシージャ(またはネストされたストアド・プロシージャ)に設定された非常に最初の結果を探していることが表示され、そのためのモデルを出してくれる。

代わりに関数にネストされたproc呼び出しを変更すると、私は望むモデル(test_proc_outside)を取得します。

外部のproc(test_proc_outside)に結果セットのクラスを生成し、test_proc_insideの内部結果を気にしないようDBMLファイルに指示する設定がありますか?事前に

おかげで、

クレイグ

答えて

0

は、私はそれはあなたがL2Sと望む結果を得ることが可能だと思うが、あなたはまた、同様に他のすべての結果を取得する必要があります。デザイナーはそれを行うことはできませんので、IMultipleResultsインターフェイスのインスタンスを返すメソッドを使って部分クラスのDataContextを拡張してsprocをマップする必要があります。このブログ記事を参照してください。

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

また、ストアドプロシージャは、あなたのL2Sモデル内のエンティティにマップされていない結果セットを返すされている場合、あなたが定義することにより、手動でそれらの結果を表すために、特別な型を作成必要がありますL2Sは通常、designer.csにストアドプロシージャの結果の型を生成するのと同じ方法でコード内に格納します。