Я понимаю ваши сомнения. У меня было то же самое, когда я начал использовать LinqToSql. Чтобы помочь мне найти лучший способ, я начал создавать личный проект, в котором я мог бы протестировать все подходы без беспокойства и без предубеждения.
В ходе этого упражнения я обнаружил, что единственный контекстный подход является наиболее полезным. Это решение проще в обслуживании, и если вам потребуется заново создать домен, вы будете управлять только одним файлом только в одном проекте.
Другой аспект, который я понял во время учений, заключается в том, что использование LinqToSql напрямую неэффективно с точки зрения организации. Если у вас есть проект, в котором команда будет выполнять разработку, а не только одного человека, вы должны «оградить» LinqToSql от них. Должен быть «шериф», который будет работать с доменом, и вы также должны использовать некоторый механизм абстракции для защиты модели от злоупотреблений (я реализовал шаблон репозитория, и он работал хорошо, но вы могли найти другие подходы).
Я также столкнулся с проблемой создания некоторых логических групп внутри домена. В действительности я использовал некоторые методы DDD (Domain Driven Design) для создания так называемых агрегатов. Агрегаты - это логическое расположение объектов внутри домена, где у вас есть корневой объект (который работает как агрегатор) и несколько других спутниковых объектов, связанных между собой. Вы можете сделать это, создав несколько новых объектов в домене LinqToSql. Эти новые объекты будут отключены от базы данных и будут работать как агрегаторы. Этот подход позволит вам создавать «субдомены» внутри вашего домена и поможет вам улучшить дизайн.
В конце концов, я понял, что лучший способ использовать LinqToSql - это использовать контекст как простой DAL. Повторно используйте его домен с некоторыми расширениями (где мы можем использовать T4, чтобы помочь нам создать код), где сущности преобразуются в DTO (объекты передачи данных), чтобы предоставлять данные другим слоям.
Я публикую (пока не закончено) шаги, которые я предпринял во время упражнения, в своем блоге: http://developmentnirvana.blogspot.com/