我想使用 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);
但是当我尝试将它放入批处理时,我不能再使用第一次调用的返回来创建孩子,因为它还没有被制作出来。我尝试使用与创建对象相同的数据,但这不起作用,它只是在服务器上的 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 中是否有可能?