我想更新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的响应中包含的值?
感谢。