0

我正在关注这个OData V4 教程,现在遇到了绑定函数的问题MostExpensive

此函数绑定到Products集合并WebApiConfig.Register()按照教程中的建议进行注册:

ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
builder.Namespace = "ProductService";
builder.EntityType<Product>().Collection.Function("MostExpensive").Returns<decimal>();

本教程的第 2 部分仅描述了此服务的基本客户端。所以我想扩展它,以便我也可以调用教程后面部分中描述的函数。

OData Client Code Generator我已经按照教程中的建议创建了客户端。然后我添加了一些产品和供应商,然后想要获得最昂贵的产品:

static void Main(string[] args)
{
    const string serviceUri = "http://localhost:52542";
    Container container = new Container(new Uri(serviceUri));

    AddProducts(container, GenerateSomeProducts());
    AddSuppliers(container, GenerateSomeSuppliers());

    Console.WriteLine("Most expensive product is: {0}", container.Products.MostExpensive().GetValue());

    ...
}

调用GetValue()时,我得到一个引用类型但预期类型的InvalidOperationException​​说明。http://localhost:52542/$metadataEdm.DecimalCollection(Edm-Decimal)

http://localhost:52542/Products/ProductService.MostExpensive()当我直接在浏览器中调用时

{
    "@odata.context":"http://localhost:52542/$metadata#Edm.Decimal","value":40000.95
}

这似乎是正确的。

我做错什么了吗?我不知道如何解决这个问题。那么对此有什么建议吗?

4

1 回答 1

1

我猜你使用的是 T4 2.2.0,对吧?

T4 2.2.0 中存在导致此问题的错误。您可以使用以下链接中的内容来替换您的 ttinclude 文件并重新生成您的代理以解决该问题。

https://raw.githubusercontent.com/LaylaLiu/odata.net/T4TempFix/src/CodeGen/ODataT4CodeGenerator.ttinclude

于 2015-03-13T03:25:55.617 回答