Linq to Sql предлагает отображение 1: 1 между сущностями и таблицами вашей базы данных. Можно утверждать, что сами сущности - это уровень абстракции от базы данных, и это то, к чему вы привязаны.
Если вы делаете дублирование 1: 1 сущностей, предлагаемых linq для sql, то это может означать, что их не стоит иметь там, потому что вы все еще так же привязаны к этим классам, как и к сущностям предлагается linq к sql.
Создавая еще один слой, вы также исключаете преимущества отслеживания изменений, предоставляемые linq to sql, а это означает, что вы должны копировать любые изменения из ваших классов в сущности, предоставленные linq to sql, для выполнения операций с данными.
Если вы хотите абстрагировать код типа DataContext
от каких-либо презентаций или бизнес-уровней и более жестко контролировать интерфейс с вашими данными, тогда шаблон репозитория хорош. Вы всегда можете сделать так, чтобы ваш репозиторий возвращал типы сущностей, созданные linq в sql, что означает, что вы не дублируете типы, вы также получаете отслеживание изменений, но вы все еще сохраняете код, управляющий DataContext
внутри репозитория.
Вы можете рассмотреть возможность проецирования данных в другой класс в интересах вашей презентации (модель представления) или бизнес-логики. Это путь, по которому я склонен идти, если я хочу использовать linq to sql, но мне не нужно отображение 1: 1 между сущностями и моими моделями представления.