Linq не ORM, и Linq великолепен. Скорее всего, вы хотите использовать Linq, если это вообще возможно.
LinqToSql - это ORM, хотя это очень легкая функция. Он дает базовую (и в основном однократную) генерацию кода классов слоев данных с активными типами записей на основе определения базы данных SQL Server. Несмотря на то, что он поддерживает некоторые базовые функции ORM, большинство всего, что вы хотите, вам придется создавать самостоятельно.
EntityFramework также является ORM. Хотя он разделяет некоторые ограничения LinqToSql, он также делает некоторые вещи лучше, а некоторые хуже. Текущая версия V1 имеет много ограничений, некоторые из которых будут рассмотрены в следующей версии (V4), которая выйдет в Visual Studio 2010.
Ни LinqToSql, ни EntityFramework не являются зрелыми, проверенными ORM. Оба имеют существенные недостатки, с которыми вы можете столкнуться при выполнении большинства «обычных» проектов разработки программного обеспечения.
NHibernate предлагает значительно больше функций, чем любой из ORM от Microsoft, и вы обнаружите, что он работает практически в любой ситуации "реального мира". Если вам нравится шаблон ActiveRecord, за которым следуют ORM от Microsoft, NHibernate также поддерживает это с Castle ActiveRecord .
Все три из этих ORM поддерживают Linq.
Одно слово предостережения. Переключение между средними проектами ORM может быть трудным и дорогим, в зависимости от того, насколько хорошо вы отделяете свой уровень данных от других уровней. Вы не можете легко начать, например, с LinqToSql, а затем переключиться, например, на NHibernate, когда столкнетесь с одним из многих ограничений LinqToSql, если вы не очень умны в том, как отделить ORM от остальной части вашей реализации, может быть очень сложным в зависимости от ORM.