問題タブ [simple.odata.client]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
asp.net-core-webapi - Simple.Odata.Client クエリを使用した Dynamics CRM のクエリ (マイクロサービス - Web Api net core 2.2)
ASPネットコア上に構築されたマイクロサービスのSimple.OData.Clientの助けを借りて、Dynamics CRMにCRUD操作を行っています。
問題は、いくつかのバッチまたは POST/Patch 操作を実行すると、負荷テストで 50 ミリ秒から 17 秒の時間がかかることです (50 ユーザー、5 分、およそのリクエスト数は 1000、ステップ パターン、ウォームアップ時間は 1 分)。
InsertEntryAsync(false)、UpdateEntryAsync(false) にする、フィルターの場合は代わりにキーを使用する(該当する場合)、ODataBatch への個別の呼び出しをいくつか追加するなど、あらゆることを試しました。
時間を17秒から数ミリ秒に短縮するために他に何ができるか教えてもらえますか?
さらに情報が必要な場合はお知らせください。
前もって感謝します。
asp.net-core - OData Simple.Odata.V4.Client を使用して関連データを含む新しいレコードを挿入する方法
Microsoft.AspNetCore.Odata v7.4.0 NuGet を使用している ASP.NET Core 3.1x API を使用しており、Simple.OData.V4.Client v5 を使用している ASP.NET Core 3.1v Web クライアントを使用しています。 .12.0
Simple.Odata クライアントから、関連する LineItem オブジェクト (マスター/詳細) を含む Order オブジェクトを投稿しようとしています。Order オブジェクトは API に正しく渡されていますが、関連する LineItem コレクションは渡されていません。
これが私の Order クラスです。
これが私の OrderLineItem クラスです。
クライアント Web サイト アプリケーションの ODataService のメソッドを次に示します。
これは、API で正しく動作する Postman で使用している Order オブジェクトと関連する OrderLineItem オブジェクトの json です。
Postman を使用して関連する OrderLineItems を持つ新しい注文を投稿すると、My API は注文と関連する OrderLineItem レコードを正常に作成します。ただし、Simple.OData.V4.Client を使用して投稿すると、Order レコードは作成されますが、関連する OrderLineItem レコードは作成されません。
Postman 経由でレコードを送信するときに OData API コントローラーを見ると、含まれている OrderLineItems と共に Order オブジェクトが渡されていることがわかります。
しかし、Web アプリケーションから Simple.OData.V4.Client を使用しているときに OData API コントローラーを見ると、OrderLineItems のカウントが 0 であるため、Simple OData クライアントは関連する OrderLineItem レコードを送信していないことがわかります。ただし、Web アプリケーションの OData サービスの CreatreOrderAsync メソッドに渡される Order オブジェクトで確認できます。
そのため、単純な OData クライアントが関連レコードを含めるために必要なものが不足していると想定する必要がありますが、単純な OData クライアントのドキュメントを確認した後、マスター/詳細タイプのクライアントの Post メソッドの例を見つけることができません。
ここで何が欠けていますか?
***** 2020 年 5 月 14 日更新 *****
Simple.Odata.Client は、ディープ リンク (1 回の操作でデータが関連付けられたモデル) をサポートしていません。Microsoft には、積極的に更新されている OData クライアントがあり、関連データをサポートしています。これはより複雑ですが、より柔軟でもあるようです (つまり、ODataClientFactory と DI のサポート)。ここにドキュメントへのリンクがあります。
Microsoft クライアントは、Connected Services を使用してプロキシをセットアップし、Visual Studio の API メタデータにリンクするという点で、WCF で行う必要があったことを思い出させます。LINQ クエリをサポートしている点と、実際のネットワーク呼び出しなしで単体テストできる IOdataClientFactory が気に入っています。