Я сейчас читаю о сохраняющихся объектах в .net. Поэтому я не могу предложить лучшую практику, но, возможно, мои идеи могут принести вам некоторую пользу. Еще несколько месяцев назад я всегда использовал запросы с ручным кодированием, плохая привычка из моих ASP.classic дней.
Linq2SQL - Очень легкий и простой в освоении. Мне нравятся строго типизированные возможности запросов и тот факт, что SQL не выполняется сразу. Вместо этого он выполняется, когда ваш запрос готов (все фильтры применены), поэтому вы можете отделить доступ к данным от фильтрации данных. Также Linq2SQL позволяет мне использовать доменные объекты, которые отделены от объектов данных, которые генерируются динамически. Я не пробовал Linq2SQL на более крупном проекте, но пока он выглядит многообещающим. О, это только поддерживает MS SQL, который является позором.
Entity Framework - Я немного поиграл с ним и мне не понравилось. Кажется, что хочет сделать все для меня, и это не работает с хранимыми процедурами. EF поддерживает Linq2Entities, что снова позволяет строго типизированные запросы. Я думаю, что это ограничено MS SQL, но я могу ошибаться.
SubSonic 3.0 (Alpha) - это более новая версия SubSonic, которая поддерживает Linq. Отличительной особенностью SubSonic является то, что он основан на файлах шаблонов (шаблоны T4, написанных на C #), которые вы можете легко изменить. Таким образом, если вы хотите, чтобы автоматически сгенерированный код выглядел иначе, просто измените его :). Я только попробовал предварительный просмотр пока, но взгляну на Альфу сегодня. Взгляните сюда SubSonic 3 Alpha . Поддерживает MS SQL, но скоро будет поддерживать Oracle, MySql и т. Д.
Пока что мой вывод заключается в том, чтобы использовать Linq2SQL до тех пор, пока SubSonic не будет готов, а затем переключиться на него, поскольку шаблоны SubSonics позволяют гораздо больше настроек.