используя (свободно) NHibernate с StructureMap (или любым IoCC) - PullRequest
5 голосов
/ 20 декабря 2008

В своем стремлении изучить NHibernate я достиг следующего препятствия; как я должен идти об интеграции его с StructureMap?

Хотя примеры кода очень приветствуются, меня больше интересует общая процедура.

То, что я планировал сделать, было ...

  • Используйте Fluent NHibernate для создания сопоставлений моих классов для использования в конфигурации NHibs
  • Реализация ISession и ISessionFactory
  • Загрузите экземпляр моей ISessionFactory в StructureMap как одиночный
  • Регистрация ISession в StructureMap с кэшированием по запросу HttpRequest

Однако разве мне не нужно вызывать различные методы очистки моего экземпляра сеанса в конце HttpRequest (потому что это конец его жизни)?

Если я выполню уборку в Dispose (), будет ли structmap позаботиться об этом для меня?

Если нет, что я должен делать?

Спасибо

Andrew

Ответы [ 2 ]

4 голосов
/ 27 марта 2009

Я использую StructureMap с fluent-nhibernate (и NH Validator) в 3 моих текущих проектах. 2 из них - приложения ASP MVC, а третье - веб-служба WCF.

Ваша общая стратегия звучит правдоподобно (за исключением того, что вы не будете создавать свой собственный Session или SessionFactory, как уже отмечалось в комментариях). Для подробностей, поймите мой код конфигурации здесь:

http://brendanjerwin.github.com/development/dotnet/2009/03/11/using-nhibernate-validator-with-fluent-nhibernate.html

Пост действительно посвящен интеграции NH Validator и Fluent-NHibernate, но вы можете точно увидеть, как я регистрирую фабрику сессий и ISession в StructureMap в разделе "Бонус" поста.

RE: Убирать: Вы должны стараться и всегда работать внутри транзакции и либо зафиксировать, либо откатить транзакцию в конце вашей единицы работы. NH использует SQL Connections только тогда, когда это необходимо, и позаботится об очистке этого ограниченного ресурса для вас. Обычная сборка мусора позаботится о ваших сессиях.

Session Factory - очень дорогой объект, который вы захотите инициализировать только один раз и сохранить на время жизни вашего приложения.

0 голосов
/ 21 декабря 2008

Я не использовал карту структуры, но, может быть, я все еще могу помочь вам в правильном направлении. Свободный nHibernate - отличный выбор файлов hbm.

Что касается http-запроса, вам не нужно закрывать сеанс после завершения http-запроса. Если вы этого не сделаете, вы будете в конечном итоге утечка сеанса nHibernate. Я не уверен, что карта структуры будет обрабатывать это для вас, что я сделал, у меня есть модуль http, который закрывает сессию.

Одна вещь, на которую стоит обратить внимание, это то, что вы сделаете все возможное, чтобы обернуть весь доступ к данным в транзакции и убедиться, что nHibernate фактически передает свои изменения. Если вы сделаете это как часть вашего закрытия сессии, вы можете упустить шанс обработать ошибки. Мне любопытно услышать, что вам пришлось сделать, чтобы получить этот рабочий знак.

...