在我的应用程序中,我执行实体查询。如果我使用SQL分析器,捕获生成的SQL查询,并手动运行它,它会给出我期望的结果。 例如
Val Date
68 2011-05-31 00:00:00.000
48 2011-05-30 00:00:00.000
92 2011-05-29 00:00:00.000
52 2011-05-28 00:00:00.000
32 2011-05-27 00:00:00.000
32 2011-05-26 00:00:00.000
52 2011-05-25 00:00:00.000
81 2011-05-24 00:00:00.000
如果我在代码中粘贴一个断点并查看LoadOperation.Entities包含的内容,我注意到当条目的'Val'数字已经出现时(IE如上面的52),那么LoadOperation.Entities集合使用来自上一个条目的数据(值为52),而不是实际日期。 所以在上面的数据中,我的LoadOperation.Entities看起来像(请注意,日期现在重复,似乎因为之前发生了'Vals')
68 2011-05-31 00:00:00.000
48 2011-05-30 00:00:00.000
92 2011-05-29 00:00:00.000
52 2011-05-28 00:00:00.000
32 2011-05-27 00:00:00.000
32 2011-05-27 00:00:00.000
52 2011-05-28 00:00:00.000
81 2011-05-24 00:00:00.000
有谁知道为什么会这样?
My EntityQuery看起来像
var appDataQuery = context.GetVwKeyDatasQuery().Where(d => d.KPIDate <= OverViewDate && d.GELID == GelID && d.ClockworkID == ClockWorkID).OrderByDescending(d => d.KPIDate);
这会生成正确的T-SQL,在SQL查询分析器中执行时会返回正确的值。
其余代码是
LoadOperation lo = context.Load<vwKeyData>(appDataQuery);
lo.Completed += new EventHandler(LoadOperation_Completed);
EventHandler是
public void LoadOperation_Completed(object sender, EventArgs e)
{
LoadOperation<vwKeyData> histResults = sender as LoadOperation<vwKeyData>;
int _count = 0;
foreach (vwKeyData v in histResults.Entities)
{.......
此时histResults.Entities已经不正确了。任何帮助将不胜感激,因为这搞砸了我正在努力的一些图表。
由于
中号
答案 0 :(得分:1)
您需要设置以下内容。
context.vwKeyData.MergeOption = MergeOption.OverwriteChanges;
OverwriteChanges
将确保始终从数据源加载数据。
这应该有助于解决我们的问题。
答案 1 :(得分:1)
如上所述回答。唯一标识一行所需的每一列都应设置为模型中的实体键。
(右键单击模型设计器中的列并选择Entity Key)。