2012-04-26 24 views
10

ストアドプロシージャの戻り値を取得しようとしています。このようなストアドプロシージャの例を次に示します。Entity Framework - ストアドプロシージャの戻り値

select 
    Name, 
    IsEnabled 
from 
    dbo.something 
where 
    ID = @ID 

if @@rowcount = 0 
    return 1  

return 

これは単純な選択です。 0行が見つかった場合、結果セットはnullになりますが、戻り値は引き続きあります。

これは選択であるため、これは悪い例です。だから、0行が返された場合は確実に見つかるはずです。ただし、挿入、削除、または他の呼び出しでは、問題があるかどうかを知るためにこの戻り値が必要です。私はこの戻り値を得る方法を見つけることができませんでした。私は出力値を得ることができますが、私は結果セットを得ることができますが、戻り値はありません。

SQLを手動で呼び出した場合、またはSqlCommandをEntity Frameworkを使用して実行しても戻り値が返されますが、これは実行したくない値です。

Entity Frameworkを使用してストアドプロシージャから戻り値を取得できたことがありますか?

ありがとうございました!

+3

Entity Frameworkのは、ORMで、完全にあなたのアプリケーションから作られたデータベースへのすべての呼び出しに代わるものではありませんストアドプロシージャの出力タイプを指定します。私が呼び出した場合 – cadrell0

+3

_Iは、戻り値を取得することができますSQLを手動で実行した場合でも、エンティティフレームワークを使用してSQLCommandを実行した場合であっても、それはあなたの答えです。 – jrummell

+0

@Lamak - 私の間違いを50%未満で見て、最悪を想定しました。 –

答えて

2

いいえEntity Frameworkには、ORM(SQL置換ではないため)が豊富なストアドプロシージャサポートがありません。

既に発見したように、あまり一般的ではないストアドプロシージャの機能を使用する必要がある場合は、古い旧式のADO.NETを使用する必要があります。あなたは「」返す必要があります。このクエリで

+2

@@ rowcountはスカラー値の場合、または選択した値がスカラー値を返す場合、結果セットをすでに持っている場合、新しい結果セットが追加されます。現在、4.0では複数の結果セットがサポートされていません。複数の結果セットをサポートします。 – bugnuker

-1

EFに興味を持って結果を得るために、あなたは同じ構造(ない1と名前、でIsEnabled)を返すべきでは 、例えば0の代わりに、もし条件で1:

+1

これは質問と関係がありますか? – SQLMason

3

コードの最初のアプローチを使用して、Entity Framework 5で戻り値(および出力と入力パラメーター)を取得できました(ただし、バージョン4.xからは機能します)。あなたの投稿からは、使用しているEFのバージョンとマッピングの仕組みがわかりません。あなたは、コードの最初のアプローチを使用することを考慮すれば、ここであなたは溶液で私のポストを見つけることができます。

Get return value from stored procedure

4

私はストアドプロシージャの戻り値のサポートを推測は、Entity Frameworkのバージョンによって異なります。値を直接返すことは私のためには機能しませんでしたが、OUTPUTストアドプロシージャパラメータを使用して値を取得することができました。例:

USE [YOUR_DB_NAME] 
GO 

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

CREATE PROCEDURE [dbo].[TestReturnValue] 
    @InputValue int = 0, 
    @Result int OUTPUT 
AS 
BEGIN 
    SET NOCOUNT ON; 
    SELECT @Result = @InputValue 
    RETURN(@InputValue); 
END 

これは、テストコードです:

void TestReturnValue() 
{ 
    using (var db = new YourDBContext()) 
    { 
     var result = new System.Data.Objects.ObjectParameter("Result", 0); 
     Console.WriteLine("SP returned {0}", db.TestReturnValue(123, result)); 
     Console.WriteLine("Output param {0}", result.Value); 
    } 
} 

そして、これが出力されます:あなたは、いくつかのゴミが、OUTPUTパラメータが動作する直接返された値の出力を見ての通り

SP returned -1 
Output param 123 

This article provides general info on two ways of returning values from SP

・ホープこれはあなたが「Context.Databaseを使用する必要があります

0

に役立ちます。SQLQuery」、および

 var spReturnVaue = Context.Database.SqlQuery<Type>("[schema].YourSp").FirstOrDefault(); 

     int firstId = Context.Database.SqlQuery<int>("[dbo].GetFirstId").FirstOrDefault(); 
関連する問題