Создание объекта и связи с этим объектом в одном пакете с использованием 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 } });

Таким образом, он все равно будет обрабатываться в одной транзакции базы данных.

Другие вопросы по тегам