2014-12-16 4 views
0

Если я вызываю службу OData, содержащую поставщиков и продукты, я могу запросить продукты, вызывающие .Expand («Поставщик»), которые будут заполнять свойство .Vendor каждого Продукта.WCF Odata. Expand Caching

Проблема, с которой я столкнулся, заключается в том, что если я запрашиваю Продукты без расширения Vendor, а затем запускает другой запрос на продукты, пытающиеся расширить Vendor, любые Продукты, которые кэшируются из предыдущего запроса, не заполняются.

Так простая демонстрация,

var products = client.Products.Expand("Vendor").ToList(); 

Вернется все продукты с собственностью поставщика населенной, как ожидалось.

Но после того, как

var products1 = client.Products.ToList(); 
var products2 = client.Products.Expand("Vendor").ToList(); 

products2 не будет заселена поставщиков, предположительно потому, что эти объекты продукта уже в кэше, поэтому WCF не мешает исследовать дальше, но просто возвращает то, что он имеет.

Я могу запустить client.LoadProperty() на каждом из них, но это боль и убьет производительность. Я могу создать новый DataServiceContext, но это кажется неправильным (хотя я не могу найти ничего, что явно говорит о продолжительности жизни одного из этих объектов).

Каков наилучший способ пойти сюда?

ответ

2

Добавить такую ​​строку перед тем, как любой продукт:

client.MergeOption = MergeOption.OverwriteChanges; 

И он будет работать, как вы ожидаете.