質問: iD.HasValue ? new ObjectParameter("ID", iD) : new ObjectParameter("ID", typeof(int)); return (IObjectContextAdapter)this).ObjectContext.ExecuteFunction("my_return_int", iDParameter); } ```
回答: `ObjectContext.ExecuteFunction`を実行すると、結果は次のようになり`ObjectContext.ExecuteFunction` 。 > MSDNから :関数から返された結果を破棄します。実行の影響を受ける行の数を返します > > つまり、出力パラメータが存在することを知らないため、出力パラメータを返しません。その上、 `SET NOCOUNT ON;`を呼び出したので`SET NOCOUNT ON;`ストアドプロシージャでは、影響を受ける行の数さえ返されないため、-1が返されます。 したがって、次の2つの変更を行う必要があります。 1. 値を返さないが選択するようにプロシージャを変更します。つまり、 `RETURN @return`代わりに`SELECT @return AS alias`ます。 「ASエイリアス」部分が必要なことに注意してください。 `alias`は、任意の列名を指定できます。 2. ストアドプロシージャのマッピングを変更して、 `int32`値が必要になるようにします。疑問がある場合は、 このリンクを参照してください 。 このようにして、戻り値ではなく、結果セットとして戻り値を読み取ります。