OData实体未使用查询结果进行更新

时间:2018-06-07 23:10:10

标签: c# odata

我想更新OData实体,但首先我使用带有$ select的查询从数据源获取实体,只获取键值和我想要更新的字段。由于OData源的性质,更新实际上可能导致在源中更新其他字段,因此我希望在更新后返回整个实体。

我正在使用OData.net library

我的代码遵循以下一般模式:

DataServiceContext context ...; //instantiated with proper url, etc.
DataServiceQuery<Customer> customers = context.Customers;
// ... add $filter & $select
// ... execute query
// ... Update fields - property tracking is on customers
var response = Client.SaveChangesAsync().GetAwaiter().GetResult();
// ... check response for success
// ... create dictionary key for ByKey
Customer customer = context.Customers.ByKey(dictKey).GetValue();

当我查看客户时,它只包含我使用客户查询检索的值。但是,我没有直接在context(context.customers)上使用customers查询,而是使用entityset属性。

当我使用fiddler时,我看到从Client.SaveChangesAsync()

正确调用补丁进行更新
  

PATCH https://MyURl/data/Customers(dataAreaId='usmf',CustomerAccount ='US-051')   {“@ odata.type”:“#Microsoft.Dynamics.DataEntities.Customer”,“AddressDescription”:“Levridge发票地址”,“CustomerAccount”:“US-051”,“dataAreaId”:“usmf”,“OrganizationName” :“Levridge,LLC”}

我验证了get不包含通过Fiddler的$ select:

  

获取https://mark9a40e96096f2dec6devaos.cloudax.dynamics.com/data/CustomersV3(dataAreaId='usmf',CustomerAccount ='US-051')

整个实体从上面的get中返回(返回的内容是7K所以我不会在这里显示内容)。我只想说,我确认响应确实包含整个实体价值。

有人知道为什么客户在Customer customer = context.Customers.ByKey(dictKey).GetValue();中不包含从get返回的值以及需要做些什么来更新客户实体属性以及对get的响应中包含的值?

感谢。

0 个答案:

没有答案