Я использовал как NHibernate, так и Entity Framework.
В работе мы использовали Entity Framework, потому что было проще убедить других использовать его, а не приложение с открытым исходным кодом.
Подавляющее большинство разработчиков, с которыми я сталкиваюсь, используют NHibernate, но оба имеют свои недостатки: они делают объем работы, который вам приходится выполнять, при доступе к данным, но также ограничивают вас.
В настоящее время в EF я сталкиваюсь с проблемой, когдаЯ не могу использовать полнотекстовый поиск на сервере SQL, потому что EF не поддерживает это.Я мог бы сделать прямой запрос через контекст, но я бы предпочел использовать табличные функции, которые очень легко реализовать в Linq2, но по какой-то причине команда EF не дошла до этого.
Убедитесь, что вы следуете шаблону единицы работы, ваш сеанс создается, когда он необходим, и уничтожается в конце веб-запроса.Оба они предназначены для эффективной работы в этих условиях, сделайте что-то вроде удержания контекста / сеанса в области приложения, и вы столкнетесь с проблемами.
Создайте свое приложение так, как будто вы планируете переключать ORM в будущемпотому что, как сказал ваш первый комментатор, вам, вероятно, придется.Ваши доменные объекты должны быть POCO, они не должны иметь постоянных знаний
Купить EntityFramework Prof или NHibernate Prof (это поможет вам оптимизировать запросы)
Ожидайте, что для этого потребуется значительное количество временипривыкнуть к любой структуре, которую вы выберете.Купите книгу и начните читать ее по выбранной вами технологии, задавайте вопросы о переполнении стека заранее, прежде чем они станут блокировщиками.
Используйте Code first EF или Fluent Nhibernate, сопоставления прерываются во время выполнения, свободно разбиваются во время компиляции.
Использование Linq2Entities или Linq2Nhibenate, строго типизированные запросы упрощают жизнь примерно в 80% случаев.
Не имейте ни одного гигантского XML-файла, такого как EDMX, который ужасно сложно контролировать версиями.Остерегайтесь генерации кода, это помогает ... но это также опасно во многих ситуациях.
Я настоятельно рекомендую вам попробовать начать с нуля в примере проекта, прежде чем изменять существующий код.С небольшими проектами передумать проще.