12

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

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

if @@rowcount = 0
    return 1    

return

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

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

SQL を手動で呼び出すか、Entity Framework を使用して実行しても戻り値を取得できますSqlCommandが、これは私がやりたいことではありません。

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

助けてくれてありがとう!

4

5 に答える 5

6

ストアド プロシージャの戻り値のサポートは、Entity フレームワークのバージョンに依存すると思います。値を直接返すことはできませんでしたが、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);
    }
}

そして、これは出力です:

SP returned -1
Output param 123

ご覧のとおり、直接返された値の出力はゴミですが、OUTPUT パラメータは機能します。

この記事では、SP から値を返す 2 つの方法に関する一般的な情報を提供します。

お役に立てれば

于 2014-09-13T06:11:14.207 に答える
3

コードファーストアプローチを使用して、Entity Framework 5 (ただし、バージョン 4.x から機能すると思います) で戻り値 (および出力パラメーターと入力パラメーター) を取得できました。あなたの投稿から、使用しているEFのバージョンとマッピングの方法がわかりません。ここでコードファーストのアプローチを使用することを検討している場合は、ソリューションを含む私の投稿を見つけることができます。

ストアド プロシージャから戻り値を取得する

于 2013-02-06T17:59:19.653 に答える
3

いいえ。Entity Framework は SQL の代替ではなく ORM であるため、豊富なストアド プロシージャのサポートはありません。

すでに発見したように、ストアド プロシージャのあまり一般的でない (より高度な) 機能を使用する必要がある場合は、古き良き ADO.NET を使用する必要があります。

于 2012-04-26T19:30:14.510 に答える
-2

EF で関心のある結果を取得するには、同じ構造を返す必要があります (1 と Name、IsEnabled ではありません)。たとえば、このクエリでは、if 条件で 1 の代わりに '',0 を返す必要があります。

選択する
    名前、
    有効になっています
から
    dbo.something
どこ
    ID = @ID

@@rowcount = 0 の場合
    '',0 を返す
于 2012-04-26T19:30:39.050 に答える