Создание объекта и связи с этим объектом в одном пакете с использованием 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);
Но когда я пытаюсь поместить это в пакет, я больше не могу использовать возврат первого вызова для создания дочернего элемента, потому что это еще не было сделано. Я попытался использовать те же данные, которые я использую для создания объекта, но это не работает, он просто дает нулевой ключ в методе 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 ответ
Для этого пакетирование не требуется, вы можете создать отношения, включив их как свойство:
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 } });
Таким образом, он все равно будет обрабатываться в одной транзакции базы данных.