Simple.OData.Client を使用して 1 つのバッチでオブジェクトとリレーションシップを作成したいのですが、どうすればこれができるかわかりません。バッチ処理を使用しなくても、次のことができます。
var client = new ODataClient("https://localhost/api/");
var parent = client.FindEntriesAsync("Parents").Result.First();
var child = await client.InsertEntryAsync("Children", new Dictionary<string, object> { { "Name", "ChildName" } });
await client.LinkEntryAsync("Parents", parent, "Children", child);
しかし、これをバッチに入れようとすると、まだ作成されていないため、最初の呼び出しの戻り値を使用して子を作成できなくなります。オブジェクトの作成に使用したのと同じデータを使用しようとしましたが、これは機能しません。サーバーの create rel メソッドで null キーを与えるだけです。
var client = new ODataClient("https://localhost/api/");
var batch = new ODataBatch(client);
var parent = client.FindEntriesAsync("Parents").Result.First();
batch += delegate (IODataClient c) { return c.InsertEntryAsync("Children", new Dictionary<string, object> { { "Name", "ChildName" } }); };
batch += delegate (IODataClient c) { return c.LinkEntryAsync("Parents", parent, "Children", new Dictionary<string, object> { { "Name", "ChildName" } }); };
await batch.ExecuteAsync();
データベースでは、データを挿入するときにリレーションシップを設定する必要があるため、これをバッチで行う必要があるため、1 つのデータベース トランザクションで行う必要があります。
これは Simple.OData.Client で可能ですか? そうでない場合、一般的にODataで可能ですか?