1

ここにいる3人のプログラマーの同僚はこれに困惑しています。以前のストアドプロシージャ呼び出しから古いデータが返されるのはなぜですか?ここでは、2番目の検索の誤った結果を示しています。

ここに画像の説明を入力してください

最初の検索は正常に機能します。7392と入力し、ボタンをクリックして、期待どおりに株式7392の結果を取得します。しかし、2番目の数値(7395)を入力すると、不要な7392の結果が再び返されます。

私は最初にデザイナーと一緒にEFデータベースを使用します。ストアドプロシージャは、Entity Framework関数import(usp_StockSearch)によってラップされます。結果はエンティティに入ります。コードは次のとおりです。

TofsData.TofsEntities context = mainWindow.TofsEntitiesContext;

ObjectResult<TofsData.StockSearchResult> stockSearchResults = 
                        context.usp_StockSearch(NewStockNumTextBox.Text);

List<TofsData.StockSearchResult> stockList = stockSearchResults.ToList();

StockSearchResultsListBox.ItemsSource = stockList;

プログラムが実行されると、関数のインポート結果ObjectResult<t>は私のエンティティタイプ(StockSearchResult)になります。ObjectResultを呼び出すToList()と、sprocが実行され、返されたデータベース値がに入れられますList<StockSearchResult>

このコードを実行する前に、stockList、stockSearchResults、およびListBox.ItemsSourceがnullであり、ListBox.Items.Countが0であることがわかります。コードをステップ実行すると、.ToList()の実行後に誤った結果が表示されます。

ストアドプロシージャをSSMSから実行すると、毎回期待される結果が返されます。SQL Profilerを実行して、正しい検索パラメーターがSPROCに渡されていることを確認しました。

複数の結果を返す検索を実行すると、前の結果に追加された期待される結果が返されます。ここで何が起こっているのかについてのアイデアはありますか?

前もって感謝します。

4

1 に答える 1

2

これは、コンテキストが親クラスの構築時にのみ作成されるグローバル変数である場合に以前に見たことがあります。基本的に、これはEFキャッシュの問題であり、6.0で修正されると思います(残念ながらまだアルファ版です)。

リクエストごとのコンテキストパターンを使用してみます。数週間前に発生した同様の問題が修正されました。

于 2013-03-19T17:48:45.587 に答える