Share via


Blast from the Past: Great Post on Using the Object Cache on the Client

In the course of trying to answer a customer question on how to leverage the WCF Data Services client for caching, I came across a great blog post on the subject—which I had almost completely forgotten about:

Working with Local Entities in Astoria Client

(This post—by OData developer Peter Qian—is, in fact, so old that is refers to WCF Data Services by its original code name “Astoria.”)

The customer was looking for a way to maintain a read-only set of relatively static data from an OData service in memory so that this data could be exposed by his web app. As Peter rightly points out, the best thing to do is use a NoTracking merge option when requesting the objects. In this case, the object data is available in the Entities collection of the DataServiceContext and can be exposed in various ways. The entity data stored by the context is wrapped in an EntityDescriptor that includes the entity’s tracking and metadata, so some fancier coding is involved to expose this cached data as an IQueryable<T>, which have the LINQ—iness that we all really want.

Just re-read the post yourself, and see if you agree with me that it’s a rediscovered gem for using the WCF Data Services client.

Remember to try and avoid the temptation to use  IQueryable<T> collections on the client as the data source for another OData feed (using the reflection provider). This kind of republishing using the WCF Data Services client can get you into a lot of problems. This is because the WCF Data Services client library does not support the full set of LINQ queries used by an OData service.

Cheers,

Glenn Gailey

Comments

  • Anonymous
    March 05, 2012
    It would be nice to see how to turn on NoTracking in a WCF Data Services project.  (There are a few questions asking how to do that on the web, but no answers...)

  • Anonymous
    March 05, 2012
    The comment has been removed

  • Anonymous
    February 26, 2014
    The comment has been removed

  • Anonymous
    March 02, 2014
    @Russ, Thanks for your tips on working with cached entities on the client using NoTracking. Glenn