-3

パラメータを渡さずに EF (現在 4.3 を使用) でストアド プロシージャを呼び出すことへの参照は見たことがありません。多くのプロシージャには入力パラメータがありません。

誰かの例。

4

4 に答える 4

2

null 値を渡すことができないようには見えません。ObjectParameter を見てください。オーバーロードがあります。値とタイプ。

 public ObjectParameter(string name, object value);

 public ObjectParameter(string name, Type type);

DBNull.Value や typeof(whatever) などをいじる必要があります。
通常、null でそれを理解する時間がないため、回避策としてストアド プロシージャに入力パラメータを作成します。

于 2012-05-21T07:59:42.293 に答える
0

私はこの同じ問題に遭遇します。ObjectParameters の代わりに Null を渡すと、必要があるという例外がスローされます。

DBNull を渡すと、パラメーターを除外せずに例外をスローするパラメーターを Sproc に指定したことが示されます。

私が思いついた唯一の回避策は、要件を満たすために、何もしないダミーパラメーターを受け入れるように sproc を変更することです。

于 2012-05-21T14:41:14.363 に答える
0

実際には、ストアド プロシージャの名前だけを呼び出してパラメーターを省略しても、パラメーターを渡すことはできません。

context.ExecuteFunction<TestSPROCResult>("TestSPROC");
于 2012-08-03T09:35:14.520 に答える
0

データベース ファーストで作業する場合、エンティティ フレームワークは、モデルの作成/更新時に、入力パラメーターのないものを含むストアド プロシージャをデータベースに表示します。モデルに sproc を含め、モデル ブラウザーに関数のインポートを追加できます。コンテキストは、非ジェネリックのExecuteFunctionメソッドを呼び出して関数を実行します。(「関数から返された結果を破棄する」と書かれていますが、そうではありません。以下を参照してください)。

これは悪い習慣ですか?必ずしも。複雑な計算を実行するバックグラウンド プロセスやパフォーマンスが重要なプロセスなど、ユーザーがアプリケーションでトリガーしたいあらゆる種類のタスクを想像できます。

入力パラメーターよりも重要なのは、sproc が少なくとも何かを返すことです。これにより、アプリケーションは、sproc が終了したかどうか、いつ、どのように終了したかをユーザーに通知できます。現在、関数インポートを追加する場合、単一のスカラー値ではなく、コレクションを返すことが唯一のオプションです。これはRETURN、sproc 内のステートメントが EF によって無視されることを意味します。SELECTEF が出力を収集できるようにするには、少なくともステートメントで値を返す必要があります。

于 2012-05-24T09:03:09.447 に答える