Visual Studio不会为OData v3服务创建代理

时间:2014-08-04 00:39:47

标签: visual-studio odata

我创建了一个OData v3服务,其中包含EntityTypes,其属性类型为集合(http://www.odata.org/documentation/odata-version-3-0/common-schema-definition-language-csdl#csdl5.1),例如:

<EntityType Name="Apps">
…
<Property Name="tags" Nullable="false" Type="Collection(Edm.String)"/>
…
</EntityType>

我通过右键单击项目&gt;为Visual Studio(2012和2013)创建了该服务的客户端。添加服务引用,为服务创建代理类(在我的示例中为AndroidContext)。

我的问题是,当我尝试检索实体时:

var app = androidContext.Apps.Where(a => a.Title == "Some title").First();

抛出InvalidOperationException:

&#34;仅在OData协议版本3.0及更高版本中支持集合类型。版本2.0不支持它们。&#34;

我发现Visual Studio创建的代理类只有一个构造函数,它只接收服务URI的参数。此构造函数调用默认使用Odata v2的基础构造函数(继承类DataServiceContext):

public DataServiceContext(Uri serviceRoot)
  : this(serviceRoot, DataServiceProtocolVersion.V2)
{
}

我不明白为什么没有允许为OData v3创建代理的构造函数。我使用的解决方案是为代理类(部分)声明一个允许OData v3的新构造函数:

public partial class AndroidContext
{
    public AndroidContext(Uri serviceRoot, DataServiceProtocolVersion version) :
        base(serviceRoot, version)
    {
        //The same that the generated constructor do
    }
}

有人知道为什么Visual Studio默认不允许使用OData v3吗?有人知道另一种解决方案吗?

0 个答案:

没有答案