绑定函数调用 returns InvalidOperationException
Bound function call returns InvalidOperationException
我正在学习 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
}
这似乎是正确的。
我做错了什么吗?我不知道如何解决这个问题。那么对此有什么建议吗?
我猜你用的是T4 2.2.0吧?
T4 2.2.0 中存在导致此问题的错误。您可以使用以下 link 中的内容替换您的 ttinclude 文件并重新生成您的代理来解决此问题。
我正在学习 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
}
这似乎是正确的。
我做错了什么吗?我不知道如何解决这个问题。那么对此有什么建议吗?
我猜你用的是T4 2.2.0吧?
T4 2.2.0 中存在导致此问题的错误。您可以使用以下 link 中的内容替换您的 ttinclude 文件并重新生成您的代理来解决此问题。