Я хотел бы создать DLL (к которому нужно получить доступ из веб-службы и, возможно, из другого приложения через автоматизацию).
Есть ли какая-либо возможность использования NHibernate внутри этой DLL (так будет работать доступ к dll через автоматизацию)?
Я уже использую NHibernate в богатом клиентском приложении, и это очень удобно, но для этого мне нужно внести некоторые изменения в app.config. Все другие обучающие программы, которые я вижу, используют NHibernate непосредственно в веб-службе - и соответственно меняют web.config.
Если вы настроите NHibernate в коде, а не используете app.config или web.config, вы сможете избежать описанной проблемы. Например, вы можете использовать функцию Fluent NHibernate Fluent Configuration для настройки NHibernate и, следовательно, избегать использования как web.config, так и hibernate.cfg.xml, которые может также вызвать некоторые проблемы.
В настоящее время я использую этот подход в веб-приложении, где уровень доступа к данным находится в отдельной сборке, и веб-сборка не имеет ссылки на NHibernate и не нуждается в модификации для web.config и не является hibernate.cfg.xml файл.
Вот пример Свободной конфигурации:
sessionFactory = Fluently.Configure()
.Mappings(x => x
.FluentMappings.AddFromAssemblyOf<FooMap>()
.ConventionDiscovery.AddFromAssemblyOf<BarConvention>()
)
.Database(MsSqlConfiguration.MsSql2005.ConnectionString(x => x
.Database("YourDbName")
.Server(@".\SQLEXPRESS")
.TrustedConnection())
.ShowSql())
.BuildSessionFactory();
Update:
Та же самая цель должна быть достигнута с использованием только стандартного NHibernate, используя их программные возможности настройки. Вместо того, чтобы использовать web.config или такой, чтобы настроить соединение с базой данных и т.д., Вы можете передать экземпляр IDictionary в Configuration.SetProperties() при создании сеанса factory.
Что-то вроде этого:
Configuration config = new Configuration();
IDictionary properties = new Hashtable();
properties["hibernate.dialect"] = "NHibernate.Dialect.MsSql2005Dialect";
// more properties here ...
config.SetProperties(properties);
В главе 3 документации есть информация об этом, но она немного на короткой стороне.