1

上記のエラーメッセージが表示されます。誰かが私に代わって翻訳してくれることを期待しています。私がオンラインで少し検索して見つけた唯一の参照は、説明のないコードブロックからの引用です。それらは関連しているように見えますが、実際には何が起こっているのかを理解するのに何の助けも提供していません。

背景:データベースと通信する方法としてこれらのマテリアライザー(およびおそらくリーダー)を使用するmvc2 / C#/ EF/SQLスタックでレガシーコードのチャンクを維持しようとしています。コード自体を読み通しただけで得られる「ああ、それはこのようなことをしているように見える」以外に、マテリアライザーがどのように機能するかについては、基本的に理解していません。マテリアライザーを使用したテーブル/オブジェクトセットの1つでデータベースにいくつかの変更を加える必要がありました。マテリアライザーを適切に調整し(私が知る限り)、既存のコードを大幅に削除して、追加された列/プロパティに同等の行を追加し、削除された行を削除しました。また、TryParseと呼ばれるc#クラスの関数についてもコメントアウトしました。これは、私が知る限り、何も使用していないためです。がらくたを少し削減しようと再試行します。現在、Thingが使用されているときは、すべてではありませんが、一部は失敗しているように見えます。変更する前に、このように失敗していたかどうかは本当にわかりません。

正確に何が起こっているのかについての答えは必要ありません-それはコードブロックなどのコメントが多すぎるのではないかと疑っています。ほとんどの場合、私は誰かが私に「ああ、このエラーメッセージは一般的にそれを意味する」という種類の一般的なポインタを1つか2つ教えてくれることを望んでいます。私が提供した情報に基づくものよりも、それは素晴らしいことです)。

お時間をいただきありがとうございます。

4

1 に答える 1

2

エラーメッセージはEFExtensionsからのものです。ソースは、リーダー内のレコードの形状(フィールド数とフィールド名)がマテリアライザーが期待する形状と一致しない場合に、このエラーがスローされることを示しています。

(マテリアライザーは、オブジェクトインスタンスを他の何かから作成するものです。この場合、データはリーダーによって読み取られます)

EFExtensionsのソースからは、これが「通常の」場合にどのように発生するかはすぐにはわかりません。最初に読み取られたレコードから予想される形状が推測され、その後のすべてのレコードがそれに対してチェックされるためです。明らかに、通常の場合IDataReader、すべてのレコードは同じ形状になります。

ただし、カスタムマテリアライザーが機能しているようです(おそらくEFExtensionsから継承しているため、エラーメッセージが表示されるのはなぜですか)。その場合、答えはマテリアライザーコードにある可能性があります。

于 2012-12-20T16:20:24.267 に答える