我有一個MVC項目,我專門使用模式定製的「工作單位」是在後端使用NHibernate的,我接觸到我的應用程序IUnitOfWork
和IUnitOfWorkFactory
接口;這些接口是通過Ninject作爲我的NHibernate實現注入的。如何實現會話每會話模式,用的WebAPI/NHibernate的
我在修改後的「每個請求的會話」樣式中使用我的UOW ...當我需要執行數據庫操作時,從注入的IUnitOfWorkFactory
中明確地生成我的IUnitOfWork
;保留它所屬的CRUD(在我的視圖和控制器之外)更容易,並且有效地防止意外的N + 1編碼問題。當然,實施起來有點困難,但迄今爲止,我對此感到非常滿意。
現在我想實現一個WebAPI呈現IQueryable<Entity>
風格的REST調用,而我的UOW模式並沒有挖掘它。 Queryable總是爆炸,試圖調用一個處置的NHibernate會話。
我讀過一些東西,網上有關如何實現一個DelegatingHandler
來管理一個呼叫的WebAPI的會話...但我看到幾個問題:
- 似乎所有的例子都是假設「 Session per Request「模式......這是迄今爲止最流行的模式,但並不完全是我正在使用的模式,所以我不確定這是否是正確的方向。
- 目前還不清楚我是如何爲這些Web API調用專門實現此處理程序的。
- 我看到很多建議使用「Session per Conversation」模式,這種模式甚至可能比「Session per Request」模式更長壽命......聽起來這可能適合這種嘗試,但關於的文檔如何來實現它是有點稀疏。
- 我看過的所有示例實現都非常緊密地將NHibernate
ISession
耦合到Web應用程序,使用內置的NHibernate機制(CurrentSessionContext.Bind(ISession)
);我寧願參考我的界面,並相信它可以維持它所需要的會話。
所以我的問題是,我如何用我自己的IUnitOfWork
接口逆着鬆耦合NHibernate的後端實現IQueryable<Entity>
的RESTful API?
你曾經看過這個問題呢,使用WebApi的UOW例子? http://stackoverflow.com/questions/15070253/ninject-setup-for-general-repository-using-nhibernate – Rippo
這很有趣,但我不認爲我可以收集我需要的東西。 –
擁抱而不是抽象似乎是人們目前的行爲方式。 – Rippo