默认情况下,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);
我写了这个简单的查询:
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);