Используя Autofac, NCommon и Fluent NHibernate, вызовите хранимую процедуру

У меня возникла проблема с использованием этих трех библиотек в проекте. Я понимаю, и поэтому вызов хранимых процедур напрямую не поддерживается в 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?


person Milimetric    schedule 02.02.2011    source источник


Ответы (1)


Вы можете получить текущую единицу работы, используя свойство CurrentUnitOfWork объекта UnitOfWorkScope.

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