Используя 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?
1 ответ
Решение
Вы можете получить текущую единицу работы, используя свойство CurrentUnitOfWork UnitOfWorkScope.
using (var scope = new UnitOfWorkScope())
{
var session = scope.CurrentUnitOfWork<NHUnitOfwork>().GetSession<MyResultClass>();
sesion.GetNamedQuery("MyStoredProc").List<MyResultClass>();
}