Le DBML devrait faire partie de la couche de données et ne pas être directement exposé à la couche métier. Il est préférable d'exposer des méthodes pour obtenir et enregistrer des entités, et de garder l'interaction avec les spécificités de la persistance sous les couvertures (dans ce cas, il s'agit de Linq2Sql, mais en l'abstrayant, vous pouvez plus tard passer à Linq2Entities, ou à n'importe quoi d'autre sans briser votre application).
Il s'agit également d'un bon modèle s'il est nécessaire d'effectuer plusieurs requêtes et de manipuler quelque peu les données pour créer vos entités, ou d'effectuer un travail supplémentaire lors de l'enregistrement (gestion des clés étrangères pour les tables enfants, etc.), car ces détails restent cachés aux autres niveaux.
en ce qui concerne les commentaires de Steven sur le fait que L2Sql ne sérialise pas bien, c'est malheureusement vrai si vous utilisez ce que le constructeur de Linq2Sql vous donne dans la boîte. quelques solutions de contournement dans les classes partielles nettoient cela assez facilement, cependant.