NHibernate может определенно сделать вашу жизнь проще. Обновления вашей схемы базы данных, безусловно, будут проще, потому что, когда вы используете ORM, у вас нет API хранимых процедур, препятствующих реорганизации вашей схемы базы данных, чтобы соответствовать изменениям в вашей бизнес-модели.
OR mappers имеют LOT, которые предлагаются, и их грустно неправильно понимают значительная часть сообщества разработчиков и почти все сообщество DBA.
Хранимые процедуры обычно предоставляют администратору баз данных больше возможностей для настройки производительности в базе данных, поскольку они имеют право переписать сохраненный процесс, пока они не меняют свой результат. Однако, по моему опыту, хранимые процедуры редко перезаписываются из-за других проблем, которые могут возникнуть в результате (т.е. когда выполняется развертывание новой версии программного обеспечения, любые измененные версии существующих процессов будут перезаписывать оптимизированную версию, которая была изменена DBA ... таким образом, отрицая выгоду и создавая проблему обслуживания и неожиданной проблемы с производительностью.)
Еще одно серьезное заблуждение (и это в основном из лагеря SQL Server ... У меня очень мало опыта работы с Oracle) заключается в том, что хранимые процедуры - это единственное, что может быть скомпилировано и план выполнения кэширован. Что касается SQL Server, любой параметризованный запрос может и, вероятно, будет скомпилирован и кэширован.
Преимущества OR-карт в том, что они адаптивны ... с хранимой процедурой, вы пишете один оператор, который будет использоваться независимо от контекстуальных нюансов при выполнении этого запроса. LINQ to SQL обладает потрясающей способностью генерировать наиболее эффективные запросы, которые я когда-либо видел, и часто бросает DBA на серьезный цикл. Я показал запросы DBA, созданные L2S, которые были полны подзапросов и нетрадиционных вещей, которые были немедленно издевались. Однако, учитывая эту проблему, производительность (а именно физическое чтение) запроса, написанного администратором баз данных, который предположительно превосходил, оказался значительно ниже (иногда в масштабе 30 физических чтений для L2S и 400 физических чтений для администратора баз данных.)
Другим критиком в отношении DBA является то, что, поскольку ORM генерирует динамический SQL, у них нет возможности оптимизировать эти запросы. Напротив (и, опять же, это ограничивается SQL Server), SQL Server предлагает множество путей оптимизации (горизонтальное и вертикальное разбиение таблиц, распределение физических файлов по дискам для любой таблицы или представления, индексы и т. Д.), Которые могут быть сделанный до необходимости изменения запроса, является необходимостью. Даже в том случае, если запрос необходимо изменить, SQL Server 2005 и более поздние версии предоставляют что-то, называемое Plan Guides, которое позволяет вам умеренно настраивать любой запрос (хранимый proc, пролив sql и т. Д.). В случае, если настройка запроса недостаточно, вы можете сопоставить любой конкретный запрос с полным запросом на замену, позволяя администратору баз данных настраивать запрос столько, сколько ему нужно (но в крайнем случае.)
это много, много преимуществ, которые можно получить с помощью OR-сопоставления, а NHibernate - один из лучших бесплатных (LLBLGen тоже очень приятный, но не бесплатный). LINQ to Sql и Entity Framework - это новые предложения от Microsoft (L2S вскоре будет заменен EF 4.0 из платформы .NET 4.0 ... который, по крайней мере, будет соперником, если не outpace, NHibernate.) Самым большим препятствием для принятия ORM обычно не является сам продукт ORM, а также его возможности или представление. Наибольшее препятствие обычно убеждает ваш администратор баз данных (если ваш счастливый/неудачный ... зависит от вашего опыта ... иметь его), ORM может повысить эффективность и снизить затраты на обслуживание без затрат на пути оптимизации для администратора баз данных.
Согласовано, сопоставление атрибутов объектов намного проще, чем отображение XML. Единственный раз, когда вы когда-либо должны были отображать XML, - это если ваши объекты данных не ограничены или скомпилированы. – Soviut
Errr ... Fluent NHIbernate не является отображением атрибутов. wiki.fluentnhibernate.org – jfar