FetchExpression结果似乎被缓存,我该如何防止这种情况?

时间:2011-12-08 15:02:10

标签: c# dynamics-crm dynamics-crm-2011 dynamics-crm-online xrm

我在Windows服务中的FetchExpression上对RetrieveMultiple操作使用CrmOrganizationServiceContext来获取和处理队列中的项目。

第一次运行时,会提取要正确处理的项目。在使用相同CrmOrganizationServiceContext实例的后续调用中,它总是检索零实体而不抛出任何错误。我添加了新实体并重新激活了应该使用FetchXml获取的现有实体,并且不会检索它们。

一旦我重新启动我的服务,它就会创建CrmOrganizationServiceContext的新实例并获取新项目。

我在这里做错了什么?

   public CrmConnector(string connectionString)
   {
        Context = new CrmOrganizationServiceContext(CrmConnection.Parse(connectionString));
   }

   public void FetchStuff()
   {
        string fetchXml = "...";
        FetchExpression fetchExpression = new FetchExpression(fetchXml);
        EntityCollection entityCollection = Context.RetrieveMultiple(fetchExpression);
        // entityCollection.Entities is always empty following first run
    }

    private CrmOrganizationServiceContext Context { get; set; }

根据请求获取Xml,唯一的自定义是count属性,它限制返回的项目数(因为这是一个队列处理器)

  <fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="false" count="10">
    <entity name="xxx1">
      <attribute name="xxx_name" />
      <attribute name="createdon" />
      <attribute name="xxx_1" />
      <attribute name="xxx_2" />
      <attribute name="xxx_3" />
      <attribute name="xxx_4" />
      <attribute name="statecode" />
      <order attribute="createdon" descending="false" />
      <filter type="and">
        <condition attribute="xxx_exported" value="0" operator="eq"/>
      </filter>
    </entity>
  </fetch>

1 个答案:

答案 0 :(得分:3)

正在进行缓存的CrmOrganizationServiceContext - 我发现以下内容有效,我的RetrieveMultiple的结果不再被缓存:)

Context = new CrmOrganizationServiceContext(CrmConnection.Parse(connectionString));
Context.TryAccessCache(cache => cache.Mode = OrganizationServiceCacheMode.Disabled);