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

Is Dynamics CRM 2013 sdk cache result of QueryExpresions by Default?

我写了这个简单的查询:

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 中修改记录时结果没有更新?

RetrieveMultiple 总是会返回新的结果,因此您的程序中一定有其他方面导致显示陈旧数据。

CrmOrganizationServiceContext 进行缓存 - 我发现下面的方法很有用,我的 RetrieveMultiple 的结果不是缓存时间更长 :)

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