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 に答える