1

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で可能ですか?

4

1 に答える 1

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" }, { "Parent", parent } });

そうすれば、1 つのデータベース トランザクションで処理されます。

于 2015-10-27T14:54:11.980 に答える