我正在为MS Dynamics CRM 2011编写自定义工作流程。在工作流程中,我有一个专门用于查询的类 - 这是因为我为其他方法做了大量Quires在工作流程中。对于我的查询,我正在使用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;
}
这两种方法与上述相同,除了" itemTogetoptionseteTeTeT"不同。我已经检查了数据库,项目确实具有值。
谁能解释为什么这样做?还是将我指向正确的方向以纠正此问题?谢谢,
我猜您正在使用相同的服务上下文检索相同的对象。如果您从实体请求属性,则CRMContext
将使用唯一的来缓存该实体的副本。这意味着包括该实体的所有后续LINQ请求将返回该实体的缓存副本,该副本仅包括您先前请求的ID和属性。为避免这种情况,您可以在提出下一个请求之前调用ClearChanges()以删除缓存版本。