LINQ to SQL заставляет вас использовать шаблон таблицы на класс. Преимущества использования этого шаблона состоят в том, что его легко и быстро реализовать, и для его запуска на основе существующей структуры базы данных требуется очень мало усилий. Для простых приложений это вполне приемлемо (и часто даже предпочтительнее), но для более сложных приложений разработчики часто предлагают вместо этого использовать шаблон управляемый доменом (что облегчает NHibernate).
Проблема с шаблоном таблица-на-класс заключается в том, что структура вашей базы данных напрямую влияет на дизайн вашего домена. Например, предположим, у вас есть таблица «Клиенты» со следующими столбцами для хранения информации об основном адресе клиента:
- StreetAddress
- Город
- Состояние
- Zip
Теперь предположим, что вы хотите добавить столбцы для почтового адреса клиента, чтобы добавить следующие столбцы в таблицу «Клиенты»:
- MailingStreetAddress
- MailingCity
- MailingState
- MailingZip
Используя LINQ to SQL, объект Customer в вашем домене теперь будет иметь свойства для каждого из этих восьми столбцов. Но если бы вы следовали шаблону проектирования на основе домена, вы, вероятно, создали бы класс Address и в вашем классе Customer было бы два свойства Address, одно для почтового адреса и одно для их текущего адреса.
Это простой пример, но он демонстрирует, как шаблон таблицы на класс может привести к несколько вонючему домену. В конце концов, решать вам. Опять же, для простых приложений, которым просто необходимы базовые функции CRUD (создание, чтение, обновление, удаление), LINQ to SQL идеально подходит из-за простоты. Но лично мне нравится использовать NHibernate, потому что он способствует более чистому домену.
Редактировать: @lomaxx - Да, пример, который я использовал, был упрощен и мог быть оптимизирован для работы с LINQ to SQL. Я хотел сделать это как можно более простым, чтобы понять суть дела. Суть в том, что существует несколько сценариев, в которых наличие структуры базы данных, определяющей структуру домена, было бы плохой идеей или, по крайней мере, привело бы к неоптимальному дизайну ОО.