Как мне заставить Microsoft.OData.Client связать таблицы при обновлении?

Я проверил этот запрос в почтальоне, и он работает правильно:

      POST request to https://example.com/api/data/v9.2/foo_module?$select=foo_moduleid 

Заголовки включают:

      Prefer:return=representation

Тело

      {
    foo_AccountId@odata.bind : "/accounts(b770a30d-55d9-e211-89ad-005056ae0100)",
    "foo_name": "Module Name"
}

Я понятия не имею, как заставить Microsoft.OData.Client сгенерировать этот запрос. Обновление записи будет выглядеть следующим образом, и это действительно работает, поскольку я могу использовать первичный ключ

      var moduleQuery = from x in context.foo_modules
                    where x.foo_moduleid == record.CrmId
                    select x;

module = new DataServiceCollection<Foo_module>(moduleQuery).Single();
module.Foo_name = $"Covid Clean Online Module (from c# at {DateTime.Now})";

var response = context.SaveChanges(SaveChangesOptions.PostOnlySetProperties);

Резюме Как мне получить foo_AccountId@odata.bind : "/accounts(b770a30d-55d9-e211-89ad-005056ae0100)" свойство в теле при использовании Microsoft.OData.Client?

1 ответ

Решение

Решением было запросить связанную запись (учетную запись) и назначить ее соответствующему свойству.
Вот код:

      var context = _dynamicsContextFactory.CreateContext();

var accountQuery = context.Accounts.Where(x =>
                    x.Primarycontactid.Lastname == lastname
                    && x.Accountnumber == number
                );
var account = new DataServiceCollection<Account>(accountQuery).Single();
var collection = new DataServiceCollection<Foo_module>(context);
var module = new Foo_module();
module.Foo_AccountId = account; // <--- this is the important line
collection.Add(module);
module.Foo_name = $"Example Online Module (from c# at {DateTime.Now})";
var response = context.SaveChanges(SaveChangesOptions.PostOnlySetProperties);
Другие вопросы по тегам