In a LINQ to SQL test harness with DataGridViews bound through a BindingSource to a DataContext with, for this example, a Northwind Customer entity and its eager-loaded Orders and Order_Details entity sets, making a change to a Customer (root) member's value marks the object dirty (i.e., it returns an object to the ctx.GetChanges<Customer>() method.)
Changing the value of a member of Orders or Order_Details entity sets in the corresponding DataGridView controls doesn't set the object dirty (i.e., the List<Customer> returned by the ctx.GetChanges<Customer>() method has a .Count of 0.
The workaround for this problem is a hack to change a Customer field value by, for example, adding a space to Customer.ContactName, then removing it in the WCF service. However, the issue isn't specific to SOA.
(This problem doesn't appear to be identical to that of https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=295116)
For more background on the problem, see the "Adding Missing Orders and Order_Details EntitySets to Original Values" topic of http://oakleafblog.blogspot.com/2007/10/linq-to-sql-has-no-multi-tier-story.html.