首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Autofac、NCommon和Fluent NHibernate调用存储过程

使用Autofac、NCommon和Fluent NHibernate调用存储过程
EN

Stack Overflow用户
提问于 2011-02-03 05:58:49
回答 1查看 861关注 0票数 0

我在一个项目中尝试使用这三个库时遇到了问题。据我所知,根据Fluent NHibernate的常见问题解答,它们并不直接支持调用存储过程。所以我定义了一个简单的hbl.xml文件,并为我的存储过程定义了一个映射:

代码语言:javascript
复制
<?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库,我有:

代码语言:javascript
复制
using (var scope = new UnitOfWorkScope())
{
    ...
    DontKnowWhereToGetSessionManager.Instance.Session.GetNamedQuery("MyStoredProc").List<MyResultClass();

    ...
}

所以我能看到的获取DontKnowWhereToGetSessionManager的唯一方法就是让Autofac注入到我的服务中。但这似乎是错误的方式。有没有办法从UnitOfWorkScope获取它?或者我应该直接给它注入Autofac?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-02-03 09:38:52

您可以使用UnitOfWorkScope的CurrentUnitOfWork属性来获取当前的工作单元。

代码语言:javascript
复制
using (var scope = new UnitOfWorkScope())
{
  var session = scope.CurrentUnitOfWork<NHUnitOfwork>().GetSession<MyResultClass>();
  sesion.GetNamedQuery("MyStoredProc").List<MyResultClass>();
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4880373

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档