EF4 POCO: Snapshot vs Self-tracking over WCF

MrLane picture MrLane · Feb 26, 2010 · Viewed 8.1k times · Source

Last year I developed a data access service for our project using Entity Framework (.NET3.5 of course) and using Julie Lerhman's book as a guide developed state tracking POCO objects. We use WCF and also have Silverlight 3 clients. We are moving to .NET 4.0 and I want to switch to using code generation to eliminate wasted developer time writing the POCO classes and the translation classes.

With the research I have done there seems to be 3 ways of state tracking POCOs:

1) Changed tracked proxies: Doesn't seem to be useful for us as it seems this doesn't work over WCF serialisation.

2) Snapshot based: Snapshot is taken when POCO entity graph is retrieved, returned graph from client is compared with that snapshot and differences are compared...seems good to me.

3) Self-Tracking Entities: Code generator generates logic for doing self tracking within the POCO objects. This seems close to what we do now except it is all generated for us.

I am trying to work out what the advantages and disadvantages are between all of these methods. I am guessing that 1 and 2 are "connected" and that they need the ObjectContext that the POCOs were originally queried from to remain instanciated, but haven't been able to confirm this. I also don't see a reason why anyone would really bother with option 1 given that option 3 seems to do the same and more...

Snapshot seems the simplest to me, but if this requires an ObjectContext to remain open for a long time I am not so sure...

I am only a junior programmer so any advice here, especially with regards to Silverlight 3 (I believe options 2 and 3 work with Silverlight 3 but 2 may have issues) is much appreciated.

Answer

willbt picture willbt · Feb 26, 2010

Go with Option 3. Self-Tracking Entities as this is what they were designed for.

"Self-tracking entities are optimized for serialization scenarios"

This post gives a good demonstration.