Nano Hash - криптовалюты, майнинг, программирование

Обновление и вставка в службу OData

У меня есть решение 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

Как я могу решить эту проблему, чтобы обновить все свойства и вставить новые элементы?

24.09.2015

Ответы:


1

Есть несколько источников информации, которые могут быть вам полезны. Во-первых, я предлагаю вам взглянуть на вики-страницы Simple.OData.Client, в частности на страницы, которые дают примеры того, как изменять данные:

https://github.com/object/Simple.OData.Client/wiki/Modifying-data

Затем есть множество примеров, которые вы можете получить из тестов проекта, например, посмотрите здесь:

https://github.com/object/Simple.OData.Client/blob/master/Simple.OData.Client.Tests.Net40/InsertTests.cs

https://github.com/object/Simple.OData.Client/blob/master/Simple.OData.Client.Tests.Net40/InsertTypedTests.cs

https://github.com/object/Simple.OData.Client/blob/master/Simple.OData.Client.Tests.Net40/UpdateTests.cs

https://github.com/object/Simple.OData.Client/blob/master/Simple.OData.Client.Tests.Net40/UpdateTypedTests.cs

И если вы хотите использовать типизированный синтаксис (который я рекомендую), вы должны сами определить свои типы сущностей, в настоящее время Simple.OData.Client не имеет утилиты для создания типов сущностей.

21.10.2015
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..