Ответ 1
Как кто-то, кто использует NHibernate в течение нескольких лет, я, возможно, не был подходящим человеком, чтобы помочь вам выбрать между EF или NHibernate, но вот некоторые общие советы, которые я узнал в эти годы:
- Управляйте. Я имею в виду выбор ORM, который позволяет вам контролировать каждый аспект его функциональности. К счастью для нас, NHibernate является одним из них. Вы можете вызывать SP и другие объекты базы данных и сопоставлять их результаты с вашими объектами. Вы можете написать перехватчики для перехвата функциональных возможностей NHibernate и т.д.
- Избегайте общих проблем с ORM с самого начала: один из них (что сильно влияет на производительность) SELECT N + 1.
- Используйте специальный профилировщик, чтобы узнать, как работает ваш ORM. Я считаю, что для нас действительно важно видеть, как работает ORM и какие запросы фактически выполняются в обратном порядке.
- Использовать кеш, когда это возможно.. Я не знаю об EF, но Nhibernate имеет механизм кэширования второго уровня, который можно использовать для кэширования извлеченных и прочитанных статических данных в памяти, чтобы получить лучшую производительность
- У вас есть план тестирования нагрузки и стресс-тестирования вашего приложения. Независимо от того, какой ORM вы выберете, будут моменты, когда вы должны увеличить производительность своего приложения. Я считаю, что лучший способ посмотреть, как приложение работает в больших масштабах, - как-то имитировать его и попытаться настроить его так, чтобы он работал в лучшем состоянии.
- У вас есть план B: ORM разработаны, чтобы помочь нам решить дилемму хранения данных в таблицах и использовать их в качестве объектов в нашем приложении. Таким образом, они делают что-то дополнительное для нас, и они имеют тенденцию быть медленнее, чем использование данных в табличном формате. Поэтому бывают случаи, когда было бы лучше использовать простой табличный формат в нашем приложении, вместо того, чтобы преобразовывать его в объекты (например, возьмем список информации)
P.S. Это может быть вне темы, но вы считаете, что используете базу данных NoSql вместо реляционной?