为什么从我的EF存储过程函数返回先前的结果导入?

时间:2013-03-19 17:30:37

标签: c# wpf entity-framework data-binding stored-procedures

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

enter image description here

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

我首先使用EF数据库与设计师。存储过程由实体框架函数导入(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()执行后的结果不正确。 / p>

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

如果我运行一个返回多个结果的搜索,我会将预期结果附加到之前的结果中。关于这里发生了什么的任何想法?

提前致谢。

1 个答案:

答案 0 :(得分:2)

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

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