我正在为MS Dynamics CRM 2011编写自定义工作流程。在我的工作流程中,我有一个专门用于查询的类 - 这是因为我为工作流程中的其他方法做了大量的查询。对于我的疑问,我使用的是LINQ。
我在测试中遇到了一个问题,我有两种方法可以获得不同的选项设置值。它们都可以单独测试。但是,如果我背靠背测试它们...获取此选项设置值...然后获取此选项设置值:后续查询始终返回null。
<!-- language: cs -->
public int GetOptionSetValues(WorkFlowHelper workFlowHelper, String bracketId)
{
Guid _bracketId = workFlowHelper.GuidChanger(bracketId);
var query = from b in workFlowHelper.serviceContext.myEntitySet
where b.myEntitySetId.Equals(_bracketId)
select new { b.itemToGetOptionSetFrom };
foreach (var qin query )
{
if (q.itemToGetOptionSetFrom == null)
{
return 0;
}
else
{
int optionSetValue = q.itemToGetOptionSetFrom;
return optionSetValue;
}
}
return 0;
}
两种方法都与上述相同,但“itemToGetOptionSetFrom”除外。我已经检查了数据库,并且项目确实具有值。
任何人都可以解释为什么这样做?或者指出我正确的方向来纠正这个问题? 谢谢,
答案 0 :(得分:4)
我猜你正在使用相同的服务上下文检索相同的对象。如果您从实体请求属性,CRMContext
将使用仅这些字段和ID来缓存该实体的副本。这意味着包含该实体的所有后续LINQ请求将返回该实体的缓存副本,该副本仅包含您先前请求的ID和属性。为避免这种情况,您可以在发出下一个请求之前调用ClearChanges()来删除缓存版本。