1

我需要将我的 OData 服务更新到第三个版本。现在,我只用 NuGet 存储库中的新库和 DataServiceConfiguration 将属性 MaxProtocolVersion 设置为 V3 更改了旧库。
可能这还不够吗?有人知道,我必须做什么才能支持我的应用程序中的任何/所有过滤器?

当我尝试发送这样的请求时: http:
//expamle.com/OData.svc/Contacts ?$filter=Phones/any(p: p/Number eq '111-222-333-11')

我的应用程序抛出此异常:

<error xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
    <code>4</code>
    <message xml:lang="" />
        <innererror>
            <message>No property 'any' exists in type 'City' at position 5.</message>
            <type>System.Data.Services.DataServiceException</type>
        <stacktrace>
            at System.Data.Services.Parsing.RequestQueryParser.ExpressionParser.ParseMemberAccess(Expression instance)
            at System.Data.Services.Parsing.RequestQueryParser.ExpressionParser.ParsePrimary()
            at System.Data.Services.Parsing.RequestQueryParser.ExpressionParser.ParseUnary()
            at System.Data.Services.Parsing.RequestQueryParser.ExpressionParser.ParseMultiplicative()
            at System.Data.Services.Parsing.RequestQueryParser.ExpressionParser.ParseAdditive()
            at System.Data.Services.Parsing.RequestQueryParser.ExpressionParser.ParseComparison()
            at System.Data.Services.Parsing.RequestQueryParser.ExpressionParser.ParseLogicalAnd()
            at System.Data.Services.Parsing.RequestQueryParser.ExpressionParser.ParseLogicalOr()
            at System.Data.Services.Parsing.RequestQueryParser.ExpressionParser.ParseExpression()
            at System.Data.Services.Parsing.RequestQueryParser.ExpressionParser.ParseWhere()
            at System.Data.Services.Parsing.RequestQueryParser.ParseLambdaForWhere(IDataService service, RequestDescription requestDescription, Type queryElementType, String expression)
            at System.Data.Services.Parsing.RequestQueryParser.Where(IDataService service, RequestDescription requestDescription, Expression source, String predicate)
            at System.Data.Services.RequestQueryProcessor.ProcessFilter() at System.Data.Services.RequestQueryProcessor.ProcessQuery()
            at System.Data.Services.RequestQueryProcessor.ProcessQuery(IDataService service, RequestDescription description)
            at System.Data.Services.RequestUriProcessor.ProcessRequestUri(Uri absoluteRequestUri, IDataService service, Boolean internalQuery)
            at System.Data.Services.DataService`1.ProcessIncomingRequestUri()
            at System.Data.Services.DataService`1.HandleRequest()
        </stacktrace>
    </innererror>
</error>
4

3 回答 3

1

您是否确保在 DataServiceBehavior 中启用了任何/所有支持? http://msdn.microsoft.com/en-us/library/system.data.services.dataservicebehavior.acceptanyallrequests(v=vs.103).aspx

于 2012-08-17T17:22:45.190 回答
0

您可能需要将 WCF 数据服务更新到 5.0 以支持 v3 - 您可以在此处下载。

于 2012-08-17T15:30:23.537 回答
0

听起来 City 是一个单例(不是集合),在这种情况下你不需要任何东西,这样的事情就可以了:

IEhttp://example.com/OData.svc/Contacts?$filter=City/Name eq 'New York'

Any/All 仅适用于 $filter 中引用的集合。

于 2012-08-17T16:05:45.047 回答