NHibernate может быть более зрелым. Это не обязательно означает, что это «лучшее» решение. Пользуясь им на работе в течение некоторого времени, я лично предпочел бы использовать почти все, чем NHibernate (даже прямой SQL, если бы миграция была возможна удаленно). Число сообщений об ошибках, выдаваемых NHibernate, которые ничего не значат (или означают что-то, но никогда не должны возникать), абсолютно ошеломляет, как и некоторые из его поведений по умолчанию (например, сброс сеанса один раз для каждого объекта, возвращаемого в Find ).
Лично, когда у меня есть выбор, я использую LINQ to SQL для всей работы с базой данных.