2011-01-30 4 views
2

Due делать LinqToSql не является подходящим для многих многих отношениях я нахожусь в процессе принятия решения, чтобы перейти к NHibernate (свободный NHibernate), если уверен, иначе ... СтруктураNinject с Fluent NHibernate в Repository слоя

проекта: UI (приложение Mvc2 с подключением Ninject до всех сервисов для контроллеров и репозиториев для служб), DomainServiceLayer (все утилиты, помощники, службы, модель домена и т. Д.) И мой уровень хранилища для сохранения. У меня есть еще одна модель вызова проекта, которая в основном предоставляет сущности, которые ссылаются на все проекты.

В основном я создаю свои сопоставления на уровне хранилища со ссылками на NHIbernate и Fluent NHIibernate, я надеюсь разоблачить интерфейсы к доменной службе для запросов и постоянных данных. Как подключить iSession, где я могу подключить его? Любой пример кода, в каком проекте я должен его вставить? В идеале я хочу сохранить это в пределах уровня хранилища ... Стоит ли изучать NHibernate и проходить через все это?

+0

http://www.sharparchitecture.net/ –

+0

Я не хочу, чтобы подключить sharparchitecture, у меня есть большая часть моего проекта на месте, плюс я Я доволен уровнем контроля, который у меня уже есть. Я только хотел добавить NHibernate 3.0 в слой репозитория, а не вмешиваться в мой весь проект ASP.NET MVC. – Haroon

+0

Правильно, но вы можете узнать и взять код оттуда. – queen3

ответ

6

Я рекомендую посмотреть сообщения блога Боба. Он подробно описывает, как использовать шаблон репозитория в Ninject с помощью NHibernate. Я планировал добавить пример в ближайшем будущем к образцу приложения, связанного с exptension MVC, поскольку этот вопрос возникает снова и снова.

http://blog.bobcravens.com/2010/06/the-repository-pattern-with-linq-to-fluent-nhibernate-and-mysql/

http://blog.bobcravens.com/2010/07/using-nhibernate-in-asp-net-mvc/

http://blog.bobcravens.com/2010/09/the-repository-pattern-part-2/

+0

Выглядит очень хорошо! Вы почти выиграли мой голос, мне нужно будет тщательно изучить, тогда я соглашусь! – Haroon

2

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

Открываю и закрываю сессию с помощью HttpModule.

+0

Не могли бы вы дать мне пример кода, указывающего меня на правильное направление? Вы публикуете NHibernate для своего веб-приложения? – Haroon

+0

NHibernate несколько раз подвергается воздействию моего веб-приложения. Посмотрите на Sharp Architecture или прочитайте хорошую книгу, такую ​​как «Pro Asp.NET MVC Framework» от Sanderson. – cbp

+0

Pro Asp.net MVC framework, к сожалению, не распространяется на это, у меня уже есть книга. В нем кратко говорится о доменном слое, но он не идет ни в какие подробности. Я могу разоблачить ISession на моем уровне репозитория и все время подключать к нему, используя DI, но мне нужно настроить такие фильтры, как Transactional, и я думаю, что мой Global.asax также должен обрабатывать некоторые события ... пытаясь выяснить, как они подключаются up .. – Haroon

3

Обычно у меня есть NHibernateSessionFactory, который является одноэлементным, который имеет метод OpenSession, и я обычно связываю ISession.

Bind<ISession>().ToMethod(context => 
NHibernateSessionFactory.Instance.OpenSession()).InRequestScope(); 

Этот метод просто вызывает до ISessionFactory.OpenSession Вы можете поместить это в NinjectModule в вашем хранилище слой, который ваше приложение может загружать, когда он создает ядро.

+0

Допустим, у меня есть слой репозитория, отдельный проект для остальной части моего приложения, в идеале я бы ввел ISession в класс репозитория и использовал сессию для выполнения своей роли. Будет ли это означать, что мне все еще нужно зацепить что-нибудь внутри Global.asax? – Haroon

+0

@Haroon Да, потому что вам нужно создать NInjnect Kernel и загрузить все ваши модули на Application_Start – Vadim

Смежные вопросы