web-dev-qa-db-ja.com

EntityFrameworkからのストアドプロシージャの呼び出しエラー

EntityFrameworkからストアプロシージャにアクセスしようとしています。

私は次の手順に従いました。

まず、Azureデータベースにストアドプロシージャを作成しました。

enter image description here

次に、データベースから.edmxモデルを更新し、必要なStoredProcedureのみを選択しました。

enter image description here

完了すると、関数のインポートでStoredProcedureが追加されていますが、StoredProceduresのセクションには追加されていません。ここに表示されるようにするにはどうすればよいですか?

enter image description here

[関数のインポート]セクションでは、すべてのパラメーターが入力として設定されますが、[MaxReference]は出力としてマークする必要があります。どうすれば変更できますか?

enter image description here

これらの2つの問題はありますが、コードを実行しました。

enter image description here

そして、私は次の例外を受け取りました:

EntityCommandCompilationException
An error occurred while preparing command definition. See the inner exception for details.

およびInnerException:

The function import 'DataModelEntities.AssignMaxSalesRef' cannot be executed because it is not assigned to a storage function.

enter image description here

30
Ingrid

次のブログ記事を参照することをお勧めします。 FunctionImportはストア関数Error にマッピングされていません。これは同様の問題について説明しています。原因は明らかに次のとおりです。

ストアドプロシージャを変更する必要があり、Entity Data Model Xmlファイル(* .edmx)から削除されました

次の段階的なソリューションを使用して:

そのエラーを修正する簡単な解決策があります。まず、edmxファイルを開き、ストアドプロシージャを所有するモデルを右クリックします。 [追加]をクリックし、[関数インポートの追加]を選択します。

コンテキストファイルで使用されているのと同じ関数インポート名を追加します(私の場合、メソッドは既に作成されていますが、混乱しています。修正しようとしているストアドプロシージャ名を選択します。エンティティを選択し、[OK]をクリックします。新しいウィンドウに「FunctionImport名が一意であることを確認してください」というポップアップが表示される場合があります。

その場合、「FunctionImport名が一意であることを確認する」ウィンドウが表示されたら、次の手順を実行します。* .edmxファイルを開き、更新するモデルを右クリックします。 「モデルブラウザで表示」を選択します。これで、モデルブラウザウィンドウが開きます。 {myProject} .DataModel> EntityContainer:{somethingEntities}> Function Importsに移動します。問題の原因となっている関数インポートはそこにあるはずです。削除して* .edmxファイルを保存してください。

関数インポートを再度追加してください。出来上がり!今回は問題ありません。 * .edmxファイルを保存し、コンテキストファイルを再作成します({myProject} .Context.ttファイルにスペースを追加するような単純で非侵襲的な変更を行います)。新しいメソッドを確認してください:

public virtual ObjectResult<MyEntity> <MyEntity>_NameoftheSP(parametets)は、コンテキストファイルに存在します。

Edmxファイルの更新に関する同様のステップバイステップの説明(および画像!)を持つ別のトラブルシューティングリソース: 関数importは、ストア関数にマップされていないため実行できません

29
Alex

この投稿はコメントでなければなりませんが、コメントするのに十分な担当者がいません。

私は同様の問題を抱えていました。ストアドプロシージャは表示されましたが、それでもエラーが発生していました。アレックスからのこの質問と回答は、モデルブラウザの関数インポートの下を見ることにつながり、各ストアドプロシージャに複数のエントリがあることがわかりました。それらには、真の重複を防ぐためのシーケンス番号がありました。 Function Importsの下のすべてを削除し、Stored Procedures/Functionsの下のすべてを削除し、データベースからモデルを更新してそれらを再度追加しました。これで問題は解決しました。

26
MsTapp

私はこのエラーがありました:

The function import *XXX* cannot be executed because it is not mapped to a store function.

チェックすると、ストアドプロシージャがデータベースから削除されました。再度作成し、エラーを修正しました。

2
Reza

Edmx Explorer(診断モード)を開くと、ダイアグラムの横にモデルエクスプローラーウィンドウが表示されます。

関数のインポートセクションで、保存されたツアー関数を見つけて右クリックし、変更することができます。

ウィンドウが開き、保存されている関数を選択します。関数はその後にマッピングされます

出来上がり、それは私のために動作します。

2
issam chouchane

解決策を試みたが、それでも動作しない場合は、プロシージャに無効な列名の問題やその他の関連する問題がないことを確認してください。同じエラーメッセージが表示されましたが、私の場合は、プロシージャ内の列名の参照が無効でした。

1
George Focas

DevArt、EF 5.0でのOracle dbの使用。私にとってそれを解決したのは、モデルからそのストアドプロシージャを削除してから、再度追加することです。ストアドプロシージャがDBで正しくコンパイルされていることを確認してください。コンパイルされていない場合は、モデルに追加するオプションがありません。

1
nir weiner