私はWeb上で見つかったいくつかの提案を適用しようとしましたが、linqでCRM 2011をクエリするときにキャッシュされた結果が残っています。私のweb.configファイルは以下のように、結果のキャッシュを無効にすることになっている、読み取ります。コードでCRM 2011 sdkでクエリキャッシングを回避する方法は?
<configSections>
<section name="microsoft.xrm.client" type="Microsoft.Xrm.Client.Configuration.CrmSection, Microsoft.Xrm.Client"/>
</configSections>
<connectionStrings>
...
<connectionStrings>
<microsoft.xrm.client>
<contexts>
<add name="Xrm" type="Xrm.XrmServiceContext, Xrm" serviceName="Xrm"/>
</contexts>
<services>
<add name="Xrm" type="Microsoft.Xrm.Client.Services.OrganizationService, Microsoft.Xrm.Client"/>
</services>
</microsoft.xrm.client>
、私はいくつかのデータを外部の変更を待つために少しテストループを持っている:
Dim crm As New XrmServiceContext("Xrm")
Dim oOpptyGuid = ' <an existing GUID in the system>
' Get opportunity by guid.
Dim oOppty As Xrm.Opportunity = (From c In crm.OpportunitySet Where c.Id.Equals(oOpptyGuid) Select c).SingleOrDefault
Dim sName As String = oOppty.Name
Dim iTries As Int16 = 0
' Wait till name is changed or tried too many times.
Do
' Sleep between tries.
Threading.Thread.Sleep(10000)
iTries += 1
' Get opportunity by guid.
oOppty = (From c In crm.OpportunitySet Where c.Id.Equals(oOpptyGuid) Select c).SingleOrDefault
Loop Until oOppty.Name <> sName Or iTries > 10
上記のループは、CRM内の別の場所で名前が変更されたことを検出しません。私は、ループ内のクエリの前に、ない喜びで、手動でキャッシュから項目を削除しようとしました:
oCacheManager = Microsoft.Xrm.Client.Caching.ObjectCacheManager.GetInstance()
For Each x As String In From y In oCacheManager Select y.Key
oCacheManager.Remove(x)
Next
を私の作品だけ事はこれです:
crm.Dispose()
crm = New XrmServiceContext("Xrm")
私はそれを生かすことができますが、コードやweb.configのいずれのキャッシュも保証しないために、コンテキストを再作成するのではなく、より良い方法です。しかし私はどこでも私のために働く解決策を見つけることができません。何か不足していますか?
ありがとうございました!回答者として誰をマークするかはわかりませんでした。私はポールの返事を読んでから、まずこのアプローチを取り入れたと思います。 :) –