2011-02-02 90 views
0

我在試圖在項目中使用這三個庫時遇到問題。我明白,因此調用存儲過程並不直接支持Fluent NHibernate根據他們的FAQ。所以我定義的映射簡單hbl.xml文件我的存儲過程:使用Autofac,NCommon和Fluent NHibernate,調用存儲過程

<?xml version='1.0' encoding='utf-8'?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="My.Data.Mappings" assembly="My.Data.Mappings"> 
    <sql-query name="MyStoredProc" callable="true"> 
     <query-param name="paramA" type="date" /> 
     <query-param name="paramB" type="int" /> 
     <return alias="MyResultClass" class="My.Data.Mappings.MyResultClass, EP.Core.Data.Mappings" /> 
     exec myStoredProc @paramA = :paramA, @paramB = :paramB 
    </sql-query> 
</hibernate-mapping> 

所以現在,在我的服務代碼,使用NCommon庫,我有:

using (var scope = new UnitOfWorkScope()) 
{ 
    ... 
    DontKnowWhereToGetSessionManager.Instance.Session.GetNamedQuery("MyStoredProc").List<MyResultClass(); 

    ... 
} 

所以,唯一的我可以看到獲取DontKnowWhereToGetSessionManager的方法是讓Autofac將其注入到我的服務中。但是這看起來是錯誤的。有沒有辦法從UnitOfWorkScope中獲取它?或者我應該只注入Autofac?

回答

3

您可以使用UnitOfWorkScope的CurrentUnitOfWork屬性獲取當前的工作單元。

using (var scope = new UnitOfWorkScope()) 
{ 
    var session = scope.CurrentUnitOfWork<NHUnitOfwork>().GetSession<MyResultClass>(); 
    sesion.GetNamedQuery("MyStoredProc").List<MyResultClass>(); 
}