2015-02-26 4 views
0

Я следую 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 
} 

который кажется правильным.

Неужели я что-то не так? Я не знаю, как это исправить. Итак, любые предложения по этому поводу?

ответ

1

Я думаю, вы используете T4 2.2.0, верно?

В T4 2.2.0 есть ошибка, которая вызывает эту проблему. Вы можете использовать контент в следующей ссылке, чтобы заменить файл ttinclude и восстановить свой прокси-сервер, чтобы обойти эту проблему.

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

+0

Вы абсолютно правы. Копирование кода из файла ttinclude исправлено. Большое спасибо. –