1

这里的 3 位程序员同事对此感到困惑。为什么从先前的存储过程调用返回旧数据?这里我展示了第二次搜索的错误结果:

在此处输入图像描述

第一次搜索工作正常。我输入7392,点击按钮,按预期得到库存7392结果。但是,如果我输入第二个数字 (7395),则会再次返回不需要的 7392 结果。

我首先与设计器一起使用 EF 数据库。存储过程由实体框架函数 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)。调用ToList()ObjectResult 运行存储过程并将返回的数据库值放入List<StockSearchResult>.

在运行此代码之前,我看到 stockList、stockSearchResults 和 ListBox.ItemsSource 为空,而 ListBox.Items.Count 为 0。当我单步执行代码时,我看到 .ToList() 执行后的结果不正确。

当存储过程从 SSMS 运行时,它每次都会返回预期的结果。我已经运行 SQL Profiler 以确保将正确的搜索参数传递给 SPROC。

如果我运行返回多个结果的搜索,我会返回附加到先前结果的预期结果。对这里发生的事情有任何想法吗?

提前致谢。

4

1 回答 1

2

当上下文是仅在构造父类时创建的全局变量时,我之前已经看到过这种情况。基本上,这是一个我认为在 6.0 中得到修复的 EF 缓存问题(遗憾的是,它仍处于 alpha 版本)。

我会尝试使用每个请求的上下文模式 - 它解决了我几周前遇到的类似问题。

于 2013-03-19T17:48:45.587 回答