0

Entity Frameworkモデルに関数インポートとして追加されたストアドプロシージャから結果セットと出力パラメーターの両方にアクセスする方法はありますか?

base.ExecuteFunction(...)戻り型を「None」に設定して、デザイナーが生成したコードが、関数を呼び出した後に出力パラメーターに正常にアクセスできるように呼び出してしまう場合(もちろん、結果セットではない)、私は見つけています。

逆に、デザイナーで戻り型を複合型のコレクションに設定すると、デザイナーが生成しbase.ExecuteFunction<T>(...)たコード呼び出しと結果セットがとして返されますが、インスタンスObjectResult<T>valueプロパティには、返されることがわかる適切な値が含まれていません。プロファイラインチObjectParameterNULL

2番目のメソッドはおそらくDataReaderを呼び出して、それを閉じないことだと思います。これは既知の問題ですか?回避策や代替アプローチはありますか?

編集

私のコードは現在次のようになっています

    public IEnumerable<FooBar> GetFooBars(
        int? param1, 
        string param2, 
        DateTime from, 
        DateTime to, 
        out DateTime? createdDate, 
        out DateTime? deletedDate)
    {
        var createdDateParam = new ObjectParameter("CreatedDate", typeof(DateTime));
        var deletedDateParam = new ObjectParameter("DeletedDate", typeof(DateTime));

        var fooBars = MyContext.GetFooBars(param1, param2, from, to, createdDateParam, deletedDateParam);

        createdDate = (DateTime?)(createdDateParam.Value == DBNull.Value ? 
            null : 
            createdDateParam.Value);

        deletedDate = (DateTime?)(deletedDateParam.Value == DBNull.Value ? 
            null : 
            deletedDateParam.Value);

        return fooBars;
    }
4

1 に答える 1

4

このSOの投稿によると、結果セットを反復処理するまで、sprocは実際には実行されません。私はあなたのシナリオをシミュレートし、いくつかのテストを実行し、これが事実であることを確認しました。コードサンプルを追加しなかったため、何をしているのか正確にはわかりませんが、以下の回答に従って、結果をリスト(Context.MyEntities.ToList()など)にキャッシュしてから、確認してください。 ObjectParameterの値

于 2012-07-01T18:15:30.260 に答える