如何将CRM Online $ metadata XML转换为C#类?

问题描述:

我用于使用CrmSvcUtil and the 2011 endpoint为Dynamics CRM生成早期绑定类。
这仍然有效,但由于被弃用,所以我想了解新的OData端点并用它来生成类

您可以通过浏览到相应的网址查看CRM实体模型XML:

https://myorg.crm4.dynamics.com/api/data/v8.1/ $metadata

或者你也可以下载从开发商部分XML在CRM:

download odata metadata

无论哪种情况,您最终都会使用定义实体模型的XML:

<?xml version="1.0" encoding="utf-8"?> 
<edmx:Edmx Version="4.0" xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx"> 
    <edmx:Reference Uri="http://vocabularies.odata.org/OData.Community.Keys.V1.xml"> 
    <edmx:Include Namespace="OData.Community.Keys.V1" Alias="Keys" /> 
    <edmx:IncludeAnnotations TermNamespace="OData.Community.Keys.V1" /> 
    </edmx:Reference> 
    <edmx:Reference Uri="http://vocabularies.odata.org/OData.Community.Display.V1.xml"> 
    <edmx:Include Namespace="OData.Community.Display.V1" Alias="Display" /> 
    <edmx:IncludeAnnotations TermNamespace="OData.Community.Display.V1" /> 
    </edmx:Reference> 
    .... blah blah .... 

如何将其转换为一组强类型的C#类?

我发现this guide which recommends using the OData v4 Client Code Generator tool但这看起来像是矫枉过正,我宁愿避免使用可能在将来停止工作的工具。

我也看到了MSDN article for DataSvcUtil.exe,它可以转换EDMX文件,但我有一个XML。我试图改变文件扩展名,但它不会转换,它抛出一个错误:

error 7001: The 'Scale' attribute is invalid - The value 'Variable' is invalid according to its datatype ' http://schemas.microsoft.com/ado/2007/05/edm:TScaleFacet ' - The string 'Variable' is not a valid Integer value.
The string 'Variable' is not a valid Integer value.

我现在卡住,不知道这是要做到这一点的推荐方式。

微软已经表示,他们将会从2011年的端点到的WebAPI过渡SDK。我还没有听说任何关于早期界定类型的细节,但我猜他们会在此之前提出官方答复。 (也许是一个CrmWebApiUtil.exe)我相信CrmSrvUtil最初是由第三方编写的,而微软只是掌握了它的所有权。

+0

我看过这篇文章,但它太含糊不清,无法缓解我的担忧。到目前为止,我已经放弃并使用代码生成器工具来创建DataServiceContext和关联的类,它的工作非常好。我忙于研究是否可以使用OData库自己生成这些类,以便我可以更多地了解该工具中发生的情况。如果我找到任何信息,我会在这里发布。 – Equalsk