2011-01-30 57 views
2

由於內做LinqToSql不是多對多的關係,我決定搬到NHibernate的(功能NHibernate)的過程是適當的,除非確信,否則......Ninject與功能NHibernate的版本庫層

項目結構: UI(Ninject的Mvc2應用程序將所有服務連接到控制器,並將存儲庫連接到服務),DomainServiceLayer(所有util,幫助程序,服務,域模型等)以及用於持久化的Repository Layer。我有另一個項目調用模型,它基本上暴露了所有項目引用的實體。

基本上我在Repository Layer中創建了映射,引用了NHIbernate和Fluent NHIibernate,我希望將接口公開給域服務以查詢和持久化數據。我如何連接iSession,在哪裏連接?任何示例代碼,我應該把它放在哪個項目中?理想情況下,我想保持在倉庫層...這是值得學習NHibernate和經歷這一切?

+0

http://www.sharparchitecture.net/ – 2011-01-31 00:14:33

+0

我真的不想掛鉤sharparchitecture,我有我的大部分項目的到位,再加上我我對已經掌握的控制水平很滿意。我只想在庫中添加NHibernate 3.0,而不是搞亂我的整個Asp.net MVC UI項目。 – Haroon 2011-02-07 08:16:45

+0

沒錯,但你可以學習並從那裏取代碼。 – queen3 2011-02-13 18:35:15

回答

6

我建議看一下Bob的博客文章。他詳細描述瞭如何使用NHibernate在Ninject中使用存儲庫模式。我計劃在不久的將來爲示例應用程序添加一個示例,以便隨着此問題一次又一次地出現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/

2

由於應用程序之間的配置不同,我在應用層(即頂層)執行配置。但將某些配置分解爲存儲在存儲庫層中的類可能會很有用。

我用HttpModule打開和關閉會話。

+0

請給我一個編碼員的例子,指出我正確的方向嗎?你是否將NHibernate暴露給你的Web App? – Haroon 2011-01-31 08:09:06

3

通常我有一個NHibernateSessionFactory,它是一個具有OpenSession方法的單例,我通常像這樣綁定ISession。

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

這種方法只是通過調用到ISessionFactory.OpenSession 你可以把它變成NinjectModule在你的倉庫層,它時,它創建內核你的應用可以加載。