Использование NHibernate внутри DLL

2

Я хотел бы создать DLL (к которому нужно получить доступ из веб-службы и, возможно, из другого приложения через автоматизацию).

Есть ли какая-либо возможность использования NHibernate внутри этой DLL (так будет работать доступ к dll через автоматизацию)?

Я уже использую NHibernate в богатом клиентском приложении, и это очень удобно, но для этого мне нужно внести некоторые изменения в app.config. Все другие обучающие программы, которые я вижу, используют NHibernate непосредственно в веб-службе - и соответственно меняют web.config.

Теги:
nhibernate

1 ответ

3
Лучший ответ

Если вы настроите 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 документации есть информация об этом, но она немного на короткой стороне.

  • 0
    Ну, я никогда не использовал Fluent NHibernate - но это выглядит хорошо. Я предпочел бы ответ без свободного. В настоящее время мы используем атрибуты сопоставления, а затем генерируем файлы - но если я не найду здесь другого решения - ваш ответ будет точно принят ...
  • 0
    спасибо за ваше дальнейшее расследование!
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню