Используя Autofac, NCommon и Fluent NHibernate, вызовите хранимую процедуру - PullRequest
0 голосов
/ 03 февраля 2011

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

1 Ответ

3 голосов
/ 03 февраля 2011

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

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