CRM 2011自定义工作流Linq查询在非空值时提供空值

时间:2014-01-20 17:19:46

标签: c# linq null dynamics-crm-2011

我正在为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”除外。我已经检查了数据库,并且项目确实具有值。

任何人都可以解释为什么这样做?或者指出我正确的方向来纠正这个问题? 谢谢,

1 个答案:

答案 0 :(得分:4)

我猜你正在使用相同的服务上下文检索相同的对象。如果您从实体请求属性,CRMContext将使用这些字段和ID来缓存该实体的副本。这意味着包含该实体的所有后续LINQ请求将返回该实体的缓存副本,该副本仅包含您先前请求的ID和属性。为避免这种情况,您可以在发出下一个请求之前调用ClearChanges()来删除缓存版本。