使用 Simple.OData.Client 批量创建对象和与该对象的关系

Creating an object and a relationship to that object in one batch using Simple.OData.Client

我想使用 Simple.OData.Client 在一批中创建一个对象和一个关系,但我正在努力寻找如何做到这一点。不使用批处理,我可以这样做:

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);

但是当我尝试将其放入批处理中时,我无法再使用第一次调用的 return 来创建子项,因为它尚未创建。我尝试使用与创建对象相同的数据,但这不起作用,它只是在服务器上的 create rel 方法中提供了一个空键:

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();

我需要批量执行此操作,因为我的数据库要求在我插入数据时设置关系,因此需要在一个数据库事务中完成。

这在 Simple.OData.Client 中可行吗?如果不是,一般在OData中可以吗?

执行此操作不需要批处理,您可以通过像 属性:

一样包含它来创建关系
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 } });

这样它仍然会在一个数据库事务中处理。