Если вы используете конструктор, то у вас нет контроля над сгенерированными классами. Хотя это может быть хорошо для многих приложений, это не подходит для всех.
Вероятно, самое большое единственное преимущество использования внешнего сопоставления заключается в том, что оно нарушает зависимость вашей модели от Linq to SQL, поэтому вы можете (например) взять те же классы модели и использовать их с Entity Framework или NHibernate. Проекты или сборки, которым необходимо использовать модель, не обнаруживают нежелательную зависимость от сборки System.Data.Linq
.
Другие вещи, которые вы можете сделать:
- Включить логику проверки или другую сложную логику в установщики свойств;
- Использовать виртуальные свойства (для прокси);
- Украсить существующие свойства другими атрибутами (например, сериализация);
- и т.д.
Ничего из этого невозможно с помощью сгенерированного кода. Вы можете расширять с помощью частичных классов, но это позволяет только добавлять элементы, а не изменять существующие. Очевидно, вы можете изменить сгенерированный дизайнером код, но ваши изменения просто будут перезаписаны.
Как я уже говорил, многим проектам эти вещи не нужны, но многим проектам это нужно, и если у вас есть тот, который делает это, вы довольно быстро превзойдете конструктор DBML и SqlMetal.