10

VS 2008、SQL Server 2008、および WPF 3.5 を使用して、スキーマにいくつかの変更を加え、モデルを更新しました。クライアントアプリが特定のエンティティを呼び出し、次の結果が得られるまで、コンパイルして正常に実行されます (実際の名前は置き換えられます)。

The data reader is incompatible with the specified '<Model>.<ViewBasedEntity>'. A member of the type, '<Property>', does not have a corresponding column in the data reader with the same name.

関連するエンティティ名とプロパティ名をサービス アプリで検索し、テーブル マップでプロパティの名前を変更しようとしました。他にも同じエラーが報告されているようですが、タイムリーな回答が見つからないようです... .

...これを追跡する方法を知っている人はいますか?もしそうなら、将来回避するために従うべき修正または方法論はありますか?

4

6 に答える 6

12

ビューを更新する代わりに、関数のインポートを更新することもできます。

  • モデル ブラウザー ウィンドウに移動します。
  • EntityContainer を展開する
  • マッピングの詳細ウィンドウで関数のインポートを開きます
  • エンティティ名 (左側の列) が予想されるフィールド名 (右側の列) と一致しない場合は、右側の列を変更して、返されたフィールドの実際の名前に一致させることができます。
于 2011-06-27T19:45:37.283 に答える
5

同じエラーメッセージを生成する同様の問題がありました-問題は、procによって返された列名にスペースが含まれていたことです。

複合型の作成時に、[my column]として作成されましたmy_column

次に、 を使用して proc を実行するとExecuteStoreQuerymy_columnがデータ リーダーに存在しませんでした。これは、proc がまだ を返したため[my column]です。

解決策: proc 列名からスペースを削除し、インポートされた関数の複合型を再作成します。

于 2012-11-22T12:24:55.770 に答える
4

わかりました-これがスキニーです:

その特定のビューは、モデルのエンティティ コンテナーで関数のインポートとして設定する必要があるストアド プロシージャの戻り値の型として設定されました。

新しいレポート要件に合わせてそのビューを更新しましたが、関数のインポートにとってそれが重要であることを認識していませんでした。追加のフィールドは、この目的で認識されるデータ セットの一部ではないため、それらのいずれにも一致するものを見つけることができませんでした。

そのため、ビューを複製し、「レポート」というサフィックスを付けてから、元のビューを期待される戻りフィールドのセットに戻しました。

出来上がり!

于 2009-09-29T19:51:51.677 に答える
2

結果セットが異なるデータ オブジェクト (if ステートメントを含む sproc など) でこれが発生するのを見てきました。

これを回避するには、a) sproc のすべてのパスが同じ列名を返すようにする b) Database.ExecuteSqlCommand を使用する

于 2013-12-28T18:36:48.963 に答える
0

簡単な方法:

  1. SP が完成したら、EF モデルを更新して使用できるようにします。
  2. PRINT ステートメントを SP に追加し、再コンパイルして実行します。
  3. 動的 SQL をコメントアウトして PRINT ステートメントに入れ、再コンパイルして確実に実行します。
  4. EF で Function Import を実行すると、列が表示されます。
  5. SPを動的コードに戻して、すべて良い:)
于 2014-03-17T21:15:07.407 に答える