Результаты FetchExpression, кажется, кэшируются, как мне предотвратить это? - PullRequest
2 голосов
/ 08 декабря 2011

Я использую FetchExpression против операции RetrieveMultiple на CrmOrganizationServiceContext в службе Windows для извлечения и обработки элементов из очереди.

При первом запуске выполняется выборка элементовбыть обработанным правильно.При последующих вызовах, использующих один и тот же экземпляр 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 Ответ

3 голосов
/ 12 декабря 2011

Кэшируется CrmOrganizationServiceContext - я обнаружил, что следующее сработало, и результаты моего RetrieveMultiple больше не кэшируются:)

Context = new CrmOrganizationServiceContext(CrmConnection.Parse(connectionString));
Context.TryAccessCache(cache => cache.Mode = OrganizationServiceCacheMode.Disabled);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...