Я бы сказал, что NHibernate впечатляет на первый взгляд и кажется очень сложным в освоении. Поэтому после быстрого прочтения вступительного документа объемом около 260 страниц и настаивания на задачах, которые мне нужно было выполнить в тестовых приложениях, NHibernate - действительно путь. И если вы не очарованы файлами сопоставления XML, просто используйте FluentNHibernate , который позволяет использовать ООП для сопоставления объектов вашего бизнес-домена.
Более того, если вам не совсем удобно с NHibernate и вы предпочитаете идти другим путем, Enterprise Library 4.1 (октябрь 2008 г.) может оказаться полезным инструментом. В зависимости от ситуации в некоторых организациях я выбрал гибридный подход NHibernate - Enterprise Library. Блок приложения доступа к данным (DAAB) в Enterprise Library довольно прост в освоении и не требует от вас изучения ничего, кроме того, что вы уже знаете. Вам просто нужно знать, какой объект использовать для создания вашего DbConnection из класса DatabaseProviderFactory для чтения из ваших файлов конфигурации, и вы можете указать базу данных по умолчанию.
Что касается моих проблем, я часто использую как NHibernate, так и Enterprise Library. DAAB позволяет мне, например, указывать соединение с базой данных для каждого файла конфигурации, поскольку я предпочитаю указывать только одно соединение для каждого файла. Это позволяет мне не развертывать ненужные файлы конфигурации для конфигураций, которые вообще не менялись, а только развертывать новый файл конфигурации для другого соединения. Поэтому, если вы объединяете новый модуль, который должен подключаться где-то еще к другому хранилищу данных, вы собираете свой модуль, не заботясь об остальном, обновите свое программное обеспечение с помощью DLL вашего модуля вместе с этим новым файлом конфигурации DAAB.
Что касается NHibernate, важно не избавляться от ISessionFactory, когда он вам больше не нужен. Создание экземпляра обходится дорого, поэтому вы хотите сохранить его в памяти. Что вы можете сделать, так это сериализовать класс объектов конфигурации (так как он Serializable), так что ваше приложение может построить свою конфигурацию, только если что-то изменилось в вашем файле конфигурации NHibernate. С другой стороны, я предлагаю вам использовать файл конфигурации hibernate.cfg.xml по умолчанию для NHibernate, так что вам не нужно будет снова и снова развертывать файл app.config при появлении обновлений.
Надеюсь, это поможет! Дайте мне знать, если вам нужна дополнительная информация.