Hi Taz -
You have two options when expanding the graph, as I see it:
1.) Refetch using the PrefetchPaths. This will automatically populate LaborCollection, etc. according to your Prefetch Paths.
If you have changes on your WorkOrderEntity, you can preserve them by using the Context object.
Pseudo code:
Context context = new Context();
context.Add(workOrder);
adapter.FetchEntity(workOrder, prefetchPaths, context);
When you expand the Graph using Prefetches - You always need to refetch the Root entity. Realize - You can also expand the Graph from a different node, without refetching all entities in the graph. For instance, if you had: WorkOrder.Customer in your graph and you needed WorkOrder.Customer.Addresses - you would only need to Prefetch on the Customer... you would not need to Refetch the WorkOrder. Make sense?
2.) Manual Fetch & Populate. Ugly. You would need to populate the related entities by hand. Fetch a LaborCollection using a PredicateExpression that matches the primary key for your WorkOrderEntity. You will then need to move all the LaborEntities over to the workOrder using workOrder.Labor.AddRange(...). The only thing you save using this method is the WorkOrder isn't refetched & there are no Context ObjectID lookups. But this is a pain.
If I were you - I would either prefetch immediately, or prefetch when you need the expanded graph.
Hope this helps -
Ryan