2011-02-02 5 views
0

これらの3つのライブラリをプロジェクトで使用しようとすると問題が発生します。私は理解しているので、ストアドプロシージャを呼び出すことは、FAQに従ってFluent NHibernateで直接サポートされていません。だから、私は、ストアドプロシージャのマッピングを持つ単純な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>(); 
} 
関連する問題