Я следую this Учебник OData V4 и теперь имею проблему с связанной функцией MostExpensive
.Связанная функция вызывает возврат InvalidOperationException
Эта функция связана с 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
}
который кажется правильным.
Неужели я что-то не так? Я не знаю, как это исправить. Итак, любые предложения по этому поводу?
Вы абсолютно правы. Копирование кода из файла ttinclude исправлено. Большое спасибо. –