用于查询odata数据集的csdl / edm模型的目的是什么?

时间:2016-09-08 22:00:52

标签: c# .net visual-studio odata dynamics-crm-2011

我的crm dynamics 2011实例生成了一个CSDL模型:

enter image description here

这个模型的目的是让我可以通过odata查询我的数据集。

除了一个实体外,我可以手动删除CSDL文件中的所有内容吗?

我问的原因是因为我能够从这个巨大的CSDL模型中分离出一个实体,看起来像这样:

enter image description here

但是查询无效。只有非常基本的查询与Edm.String工作。

作为一个重要的附注,我能够加载CSDL文件的一个子集,没有任何错误:

public static IEdmModel GetModel()
{
    if (EdmModel != null)
    {
        return EdmModel;
    }

    IEdmModel referencedModel;
    using (
        Stream csdlStream = File.Open("csdl\\WorkingorgFile.csdl", FileMode.Open, FileAccess.Read,
            FileShare.Read))
    {
        IEnumerable<EdmError> errors;
            var parseResult = CsdlReader.TryParse(new[] {XmlReader.Create(csdlStream)}, out referencedModel, out errors);

        if (!parseResult)
            throw new InvalidOperationException("Failed to load model : " +
                                                string.Join(Environment.NewLine,
                                                    errors.Select(e => e.ErrorMessage)));
    }
    EdmModel = referencedModel;
    return referencedModel;
}

1 个答案:

答案 0 :(得分:0)

我不确定CSDL模型是什么,但无论何时与CRM通信,都不需要您知道数据的确切结构。您无法过滤或选择不存在的属性,或将过滤后的属性定义为其他类型(即将日期与资金进行比较)。

CRM也不完全支持OData查询协议。例如,您不能执行聚合查询,也不能加入3层以上的深层,也不能过滤多个实体。

如果您正在寻找工具以帮助创建查询,我建议您使用FetchXmlBuilder来构建查询。它将根据您提供的FetchXml查询生成对CRM的OData调用。然后,您可以运行它们来测试数据是否符合您的要求。