2014-01-20 34 views
2

我正在爲MS Dynamics CRM 2011編寫自定義工作流程。在我的工作流程中,我有一個專門用於查詢的類 - 這是因爲我做了重大工作流程中其他方法的需求數量。對於我使用LINQ的查詢。客戶關係管理2011自定義工作流Linq查詢當它們不爲空時提供空值

我遇到了一個問題,在我的測試中,我有兩個方法出去並獲得不同的選項集值。如果單獨測試,它們都可以工作但是,如果我對它們進行測試......獲取此選項設置值...則獲取此選項設置值:後續查詢始終返回null。

<!-- language: cs --> 
public int GetOptionSetValues(WorkFlowHelper workFlowHelper, String bracketId) 
{ 
    Guid _bracketId = workFlowHelper.GuidChanger(bracketId); 
    var query = from b in workFlowHelper.serviceContext.myEntitySet 
       where b.myEntitySetId.Equals(_bracketId) 
       select new { b.itemToGetOptionSetFrom }; 
    foreach (var qin query) 
    { 
     if (q.itemToGetOptionSetFrom == null) 
     { 
     return 0; 
     } 
     else 
     { 
     int optionSetValue = q.itemToGetOptionSetFrom; 
     return optionSetValue; 
     } 
    } 
     return 0; 
} 

兩種方法都與上面相同,但「itemToGetOptionSetFrom」不同。我檢查了數據庫,這些項目確實有價值。

任何人都可以解釋爲什麼這是這樣做的?或者指出我正確的方向來糾正這個問題? 謝謝,

回答

4

我猜你正在檢索相同的服務上下文相同的對象。如果您從實體請求屬性,CRMContext將緩存該實體的副本,其中只有這些字段和ID。這意味着包含該實體的所有後續LINQ請求將返回該實體的緩存副本,該副本只包含您先前請求的ID和屬性。爲了避免這種情況,您可以在發出下一個請求之前調用ClearChanges()來刪除緩存的版本。

+0

我剛纔閱讀了這個http://msdn.microsoft.com/en-us/library/microsoft.xrm.sdk.client.organizationservicecontext_members(v = crm.6).aspx 我加了'ClearChanges() '查詢開始之前的方法,它解決了問題。謝謝 – Bactos

相關問題