1

我想使用 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 中是否有可能?

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

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

于 2015-10-27T14:54:11.980 回答