0

プロジェクトでこれら 3 つのライブラリを使用しようとすると問題が発生します。FAQによると、Fluent NHibernateではストアドプロシージャの呼び出しが直接サポートされていないことを理解しています。そこで、ストアド プロシージャのマッピングを含む単純な hbl.xml ファイルを定義しました。

<?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で注入するだけですか?

4

1 に答える 1

3

UnitOfWorkScope の CurrentUnitOfWork プロパティを使用して、現在の作業単位を取得できます。

using (var scope = new UnitOfWorkScope())
{
  var session = scope.CurrentUnitOfWork<NHUnitOfwork>().GetSession<MyResultClass>();
  sesion.GetNamedQuery("MyStoredProc").List<MyResultClass>();
}
于 2011-02-03T01:38:51.513 に答える