Это на самом деле не отвечает на вопрос (досадно, я знаю!), Но, возможно, лучше определить пользовательские объекты в ваших контрактах данных и заполнить их вручную для передачи через службу. Таким образом, если вы измените модель Linq2Sql, вы не сломаете свой клиент WCF.
Кроме того, это не так долго, как кажется. В Linq2SQL вы можете что-то вроде ..
from c in context.Customers
where (...)
select new CustomerStatusRecord() { CustomerId = c.Id, Status = c.CustomerStatus.Status ... }
CustomerId и Status - это поля в вашем только что определенном контракте на данные.
Этот метод разъединения был бы моим предпочтительным способом сделать это, но я понимаю, почему для удобства проще передать весь объект контекста данных через сервис.
Последняя мысль: если в будущем вы добавите 50 нечетных новых полей в таблицу клиентов, то, как вы описали, действительно увеличит передачу данных через ваш сервис. Однако, если он не связан, у вас есть абсолютный контроль над тем, что происходит по проводам. Если вы оставите все как есть, возможно, в конечном итоге вы передадите конфиденциальные данные.