EFは、以下から結果セットをビルドするストアドプロシージャのインポートをサポートしていません:
- 動的クエリ
- 一時的なテーブル
その理由は、プロシージャをインポートするにはEFが実行する必要があるためです。 。このような操作は、データベースにいくつかの変更を引き起こす可能性があるため、危険な場合があります。そのため、EFはストアドプロシージャを実行する前に特別なSQLコマンドを使用します。
SET FMTONLY ON
このコマンドを実行すると、ストアドプロシージャは、結果セットの列に関する「メタデータ」のみを返し、ロジックは実行されません。ただし、ロジックが実行されなかったため、一時テーブル(または構築された動的クエリ)がないため、メタデータには何も含まれていません。
2つの選択肢があります(これらの機能を使用しないようにストアドプロシージャを書き直す必要がある場合を除く):
- 返された複合型を手動で定義します(おそらく機能するはずです)
- ハックを使用し、最初に配置されたストアドプロシージャを追加するためだけに
SET FMTONLY OFF
。これにより、SPの残りのコードを通常の方法で実行できるようになります。これらの変更はインポート中に実行されるため、SPがデータを変更しないことを確認してください。インポートが成功したら、そのハックを削除します。