2011-12-14 144 views
0

我原本以爲這是一個INotifyPropertyChanged /綁定問題,因爲我不知道如何調試silverlight部分。所以我不得不把一個消息框放在foreach循環中,並在數據返回後查看這些值。事實證明,我無法從服務獲取更新的數據。我使用該服務對服務器上的數據進行一些更新,以及何時返回調用以重新加載數據。這部分服務正在返回正確的數據(我使用斷點進行了驗證,以便查看數據結果持有的情況)。但silverlight方面沒有得到正確的數據。這是相關的代碼。WCF RIA服務返回數據不匹配服務的兩側

public IQueryable<OurClass> GetItems(string condition) 
{ 
    var result = from items in context.OurClass 
        where item.value == condition 
        select item; 

    return result; //had my breakpoint here and the values were the correct updated values 
} 

/

Context.Load<OurClass>(Context.GetItemsQuery(condition)).Completed += new EventHandler(Context_LoadCompleted); 

/

private void Context_LoadCompleted(object sender, EventArgs e) 
{ 
    IEnumerable<OurClass> result = ((LoadOperation<OurClass>)sender).Entities; 
    //This is where I put a MessageBox to view the returned results and the data was different 
    //than what was contained in the other result 
} 

任何想法可能導致此?接下來我應該看看什麼?

編輯:

一些示例數據OurClass.OurProperty將等於「測試」在服務器端,但一旦在客戶端上收到了將等於這是舊值「發展」。 IEnumerable將保存新添加的記錄並且沒有刪除的記錄。任何以前存在的將包含舊的屬性值而不是新的值。

+0

一個原因可以對數據進行不同的是,如果在幾個項目的鍵列是相同的。如果你返回一組'OurClass',並且鍵列是一個'int',那麼確保返回的每個項目都有一個唯一的'int'鍵。 (請在服務方面檢查,而不是在消費方。) – EtherDragon

+0

不確定您的意思是按鍵列。我們的主要關鍵是Id財產和Guid。默認情況下,它們不能相同,所以不能是你所說的。我明天也會進行調查。謝謝你的提示。 –

+0

每個數據傳輸對象作爲一個Key(由屬性上的[Key]屬性表示)如果使用EF,則從數據庫爲您生成該關鍵字,查看'OurClass'的類定義並確定哪個財產被標記爲'[Key]' – EtherDragon

回答

1

的解決方案是,我需要的參數LoadBehavior.RefreshCurrent添加到查詢電話。所以這個:

Context.Load<OurClass>(Context.GetItemsQuery(condition)).Completed += new EventHandler(Context_LoadCompleted); 

需要的是這樣的:

Context.Load<OurClass>(Context.GetItemsQuery(condition), LoadBehavior.RefreshCurrent, true).Completed += new EventHandler(Context_LoadCompleted); 
0

在服務的每一面數據有何不同?你能向我們展示一些示例數據嗎?你可以看看數據使用像wireshark(將需要在服務器上,或在你的客戶端,你正在運行你的Silverlight小程序)。

你是否嘗試過正確調試你的Silverlight,即附加到如下所示的過程:http://www.michaelsnow.com/2010/04/22/silverlight-tip-of-the-day-2-attach-to-process-debugging/

我也建議打開WCF跟蹤如下詳細說明:http://msdn.microsoft.com/en-us/library/ms733025.aspx

+0

我會看看你的鏈接。謝謝。我更新了我的帖子,更多地描述了我期望的和我得到的數據。 –

+0

我得到了silverlight最後的調試工作之前曾遵循過類似的程序,但從來沒有看到一個說「silverlight」的程序讓我加入,現在意識到這是因爲我已經自動以腳本模式附加了。我只是想到了這一點,因爲我不小心在錯誤的Visual Studio實例中打開了Attach to Process窗口,並在該進程上看到了silverlight標籤。現在我將不得不在明天查看WCF跟蹤,以瞭解接收端的值與發送端不同的原因。 –