绑定函数调用返回InvalidOperationException

时间:2015-02-26 12:40:41

标签: c# asp.net odata t4 odata-v4

我关注this OData V4教程,现在绑定函数MostExpensive出现问题。

此函数已绑定到Products集合,并在WebApiConfig.Register()中注册,如教程中所示:

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

本教程的part 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/$metadata指的是Edm.Decimal类型,但预计会有Collection(Edm-Decimal)类型。

直接在浏览器中致电http://localhost:52542/Products/ProductService.MostExpensive()

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

这似乎是正确的。

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

1 个答案:

答案 0 :(得分:1)

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

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

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