パラメータを渡さずに EF (現在 4.3 を使用) でストアド プロシージャを呼び出すことへの参照は見たことがありません。多くのプロシージャには入力パラメータがありません。
誰かの例。
パラメータを渡さずに EF (現在 4.3 を使用) でストアド プロシージャを呼び出すことへの参照は見たことがありません。多くのプロシージャには入力パラメータがありません。
誰かの例。
null 値を渡すことができないようには見えません。ObjectParameter を見てください。オーバーロードがあります。値とタイプ。
public ObjectParameter(string name, object value);
と
public ObjectParameter(string name, Type type);
DBNull.Value や typeof(whatever) などをいじる必要があります。
通常、null でそれを理解する時間がないため、回避策としてストアド プロシージャに入力パラメータを作成します。
私はこの同じ問題に遭遇します。ObjectParameters の代わりに Null を渡すと、必要があるという例外がスローされます。
DBNull を渡すと、パラメーターを除外せずに例外をスローするパラメーターを Sproc に指定したことが示されます。
私が思いついた唯一の回避策は、要件を満たすために、何もしないダミーパラメーターを受け入れるように sproc を変更することです。
実際には、ストアド プロシージャの名前だけを呼び出してパラメーターを省略しても、パラメーターを渡すことはできません。
context.ExecuteFunction<TestSPROCResult>("TestSPROC");
データベース ファーストで作業する場合、エンティティ フレームワークは、モデルの作成/更新時に、入力パラメーターのないものを含むストアド プロシージャをデータベースに表示します。モデルに sproc を含め、モデル ブラウザーに関数のインポートを追加できます。コンテキストは、非ジェネリックのExecuteFunctionメソッドを呼び出して関数を実行します。(「関数から返された結果を破棄する」と書かれていますが、そうではありません。以下を参照してください)。
これは悪い習慣ですか?必ずしも。複雑な計算を実行するバックグラウンド プロセスやパフォーマンスが重要なプロセスなど、ユーザーがアプリケーションでトリガーしたいあらゆる種類のタスクを想像できます。
入力パラメーターよりも重要なのは、sproc が少なくとも何かを返すことです。これにより、アプリケーションは、sproc が終了したかどうか、いつ、どのように終了したかをユーザーに通知できます。現在、関数インポートを追加する場合、単一のスカラー値ではなく、コレクションを返すことが唯一のオプションです。これはRETURN
、sproc 内のステートメントが EF によって無視されることを意味します。SELECT
EF が出力を収集できるようにするには、少なくともステートメントで値を返す必要があります。