我创建了一个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吗?有人知道另一种解决方案吗?