我的工作,需要以下項目:入門/從NHibernate的3.2生成SQL(帶參數)
- 提取從一個特定的NHibernate 3.2會話完整的SQL查詢。
- 對查詢執行特定操作(即不necesserily記錄它)
- 不要在整個系統影響NHibernate的,以避免引入性能問題
我檢查了幾種方法,其中許多人已經出現在計算器上。下面是我的選擇,我現在看到的:
手冊
在最天真和惱人的解決方案,我可以按照業務邏輯和構建查詢自己 - 例如,如果BL建立一個標準的對ID = 5做了限制,我會用SELECT ... WHERE ID = 5
建立一個查詢。由於我們有一個非常複雜的BL,我真的很想避免這種情況。
NHibernate的攔截
本來,使用OnPrepareStatement
似乎是最好的選擇。不過,我很快discovered查詢的參數不記錄,這使得它很無用。
內省NHibernarnate的的ICriteria
當執行與NHibernate的查詢,我們與包含限制,排序和聚合定義的ICreteria對象做到這一點。當描述here的CriteriaWalker時,我似乎可以對其進行細分。但是,它似乎對複雜的查詢感到困惑。此外,在某些情況下,我們使用NHibernate 3新的「QueryOver」語法,但此解決方案對此無幫助。
使用ILoggerFactory
由於NHibernate的3,你可以自定義寫入日誌工廠(sample)。這會得到完整的SQL,但是,它也會影響整個NHibernate系統,並且它會讓工廠申請特定的ISession,甚至是ISessionFactory。
定製NHibernate的司機
我考慮寫一個代理NHibernate的驅動程序並將其分配給特定的SessionFactory(如描述here)。然而,友好的評論警告說,它在Nhibernate 3.2中的工作時間更長。
使用動態代理
This code使用城堡的動態代理注入自身內部的Isession。我還沒有試過用我的服務器運行它,但我對使用這種激烈的措施有點謹慎。如果沒有其他的工作,但是,我想這是需要考慮的事情。
對此有何建議?
現在我有點卡在選擇去與因爲沒有似乎是在做自己的工作,完全正確的最佳方式。如果還有其他建議,我很樂意聽到他們。