У меня есть решение Xamarin.Forms Visual Studio, в которое я установил пакет «Simple.OData.Client» с NuGet. У меня есть URI службы OData, и я хочу загрузить элементы из таблицы «Люди», в которой базовым типом элемента является «Человек» и которая содержит экземпляры класса «Клиент», который наследуется от класса «Человек». , как я вижу при открытии URI, к которому я добавляю «/$metadata».
<Schema xmlns="http://schemas.microsoft.com/ado/2009/11/edm" Namespace="A">
...
<EntityType Name="Person" Abstract="true">
...
<EntityType Name="Customer" BaseType="A.Person">
...
<EntityContainer Name="Model" m:IsDefaultEntityContainer="true">
...
<EntitySet Name="Persons" EntityType="A.Person"/>
...
Я создаю экземпляр службы:
ODataClient clientSimple = new ODataClient("http://.../.../odata.v3/default");
Я загружаю элементы из таблицы данных:
System.Collections.Generic.IEnumerable<System.Collections.Generic.IDictionary<string, object>> persons = await clientSimple.For("Persons").FindEntriesAsync();
Элементы возвращаются в виде словарей, где ключи — это имена свойств, а значения — значения свойств. Я вижу, что присутствуют свойства из типа сущности «Человек», а также свойства, добавленные в производный тип «Клиент».
Я знаю, что есть также возможность типизированного синтаксиса:
var personsTyped = await clientSimple.For<Person>().FindEntriesAsync();
Однако я не знаю, где взять определение класса «Person», чтобы использовать его здесь в качестве параметра универсального типа.
Затем я хочу изменить запись в службе OData:
await clientSimple.For("Persons").Key(1).Set(new { FirstName = "Johnny" }).UpdateEntryAsync();
Это работает, пока я обновляю только свойство, определенное в типе сущности «Человек», но попытка изменить свойство, добавленное в тип сущности «Клиент», вызывает исключение:
await clientSimple.For("Persons").Key(1).Set(new { FirstName = "Johnny", SalesPerson = "..." }).UpdateEntryAsync();
[Simple.OData.Client.UnresolvableObjectException] No property or association found for [SalesPerson].
Попытка вставить новый элемент также не удалась:
var newObjectCreated = await clientSimple.For("Persons").Set(new { FirstName = "...", ... }).InsertEntryAsync();
[Simple.OData.Client.WebRequestException] Internal Server Error
Как я могу решить эту проблему, чтобы обновить все свойства и вставить новые элементы?