2011-09-02 20 views
1

在我的應用程序中,我執行一個entityquery。如果我使用SQL事件探查器,捕獲生成的SQL查詢並手動運行它,它會給出我期望的結果。 例如RIA EntityQuery複製其中一個值匹配的行

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包含,我注意到,當「瓦爾」數字對於一款入門已經出現(IE像上面52)那麼LoadOperation.Entities集合將使用前一個條目中的數據(值爲52),而不是實際的日期。 因此在上面的數據,我LoadOperation.Entities樣子(注意,日期,現在重複,似乎因爲「丘壑」之前已經發生)

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 

有誰知道爲什麼發生這種情況?

我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); 

的事件處理程序是

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

曼森,這可能是因爲數據被EF緩存。 – Jethro

+0

只是想通了。在我的模型中,日期字段未被設置爲關鍵字。由EntityQuery返回的行中的其他值可能非常合理,具有相同的值。唯一保證改變的是日期。一旦我將日期設置爲關鍵字,它就開始包含正確的數據。 – MJM

回答

1

回答如上。應該在模型中將每個唯一標識一行的列設置爲實體鍵。

(右鍵單擊模型設計器中的列並選擇實體鍵)。

1

您需要設置如下。

context.vwKeyData.MergeOption = MergeOption.OverwriteChanges; 

OverwriteChanges將確保數據總是從數據源加載。 這應該有助於排序我們的問題。

+0

這不是我的情況的解決方案,但我不知道這個選項,所以非常感謝。 – MJM

+0

@米克曼森,肯定的事情。 – Jethro

相關問題