是否默认情况下,Dynamics CRM 2013 sdk缓存QueryExpresions的结果?

时间:2015-01-20 10:18:39

标签: dynamics-crm xrm

我写了这个简单的查询:

var connectionString = String.Format("Url={0}; Username={1}; Password={2}; Domain={3}", url, username, password, domain);
var myConnection = CrmConnection.Parse(connectionString);
CrmOrganizationServiceContext _service = new CrmOrganizationServiceContext(myConnection);
var whoAmI = _service.Execute(new WhoAmIRequest());

var query = new QueryExpression
        {
            EntityName = "phonecall",
            ColumnSet = new ColumnSet(true)
        };

        query.PageInfo = new PagingInfo
        {
            Count = 20,
            PageNumber = 1,
            PagingCookie = null
        };

        query.Orders.Add(new OrderExpression
        {
            AttributeName = "actualstart",
            OrderType = OrderType.Descending
        });

        query.Criteria = new FilterExpression() { FilterOperator = LogicalOperator.And };
        query.Criteria.AddCondition("call_caller", ConditionOperator.In, lines);

var entities = _service.RetrieveMultiple(query).Entities;

我有一个程序每分钟运行一次这个查询。在第一次执行时,会显示正确的结果,但对于后续查询,结果永远不会随着我在CRM中更新记录而改变。

如果我重新启动程序,结果会在第一次加载时再次正确刷新。

为什么结果未在CRM中修改记录时更新?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

RetrieveMultiple总会带回新的结果,因此程序必须有一些其他方面导致过时的数据显示。