2

2 つの DB に 2 つの同じ手順があります。

  • 同じ名前
  • 同じパラメータ名とタイプ
  • 同じ列のタイプと名前を返す選択で終了します( a を入力SELECT ... INTO tableすると、まったく同じテーブルが生成されます)。

唯一の違いは、最終的な選択のための SQL クエリを構築するコードです。データベース 1 で EF を使用すると意図したとおりに動作しますが、データベース 2 でコードを実行するとエラーで終了します。

データ リーダーは、指定された 'Ctx.Procedure_Result' と互換性がありません。タイプ 'FooId' のメンバーには、データ リーダーに同じ名前の対応する列がありません。

私は使用しています:

  • エンティティ フレームワーク 4.2
  • ビジュアル スタジオ 2010
  • Sql サーバー 2008 R2

なぜこれが起こっているのかを理解するのに十分なEF内部の知識がありません。私の考えでは、同じものを盗聴しないメカニズムを盗聴するいくつかの列タイプ/名前が必要であるということです。

編集1:

このプロシージャはテーブル型を「返す」のではなく、いくつかの行を「選択」するだけです。この選択結果は、EDMX の ComplexType にマップされます。

詳しくはお気軽にお尋ねください。

4

1 に答える 1

2

私のせいで、示唆されているように、SQL Server Profiler で EF クエリをトレースしました。

実際、EF はオプションのパラメータで NULL を使用していたため、プロシージャ内の SQL クエリが破壊されていました ('select ...' + NULL => NULL)。

NULL クエリを使用すると、プロシージャは列をまったく選択せず、EF データ リーダーがクラッシュします。

于 2013-01-21T13:57:57.213 に答える