使用Simple.OData.Client

时间:2015-10-27 13:29:48

标签: c# odata odata-v4 simple.odata

我想使用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中使用吗?

1 个答案:

答案 0 :(得分: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 } });

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