NHibernate只有存储过程

我想让NHibernate在调用ISession.Get时通过其键而不是使用动态SQL来获取实体时调用存储过程。

我们一直在使用NHibernate并允许它为查询和插入/更新/删除生成SQL,但现在可能必须将我们的应用程序部署到需要我们使用存储过程进行所有数据库访问的环境中。 我们可以在.hbm.xml映射文件中使用sql-insert,sql-update和sql-delete进行插入/更新/删除。 我们的hql和条件查询必须用存储过程调用替换。

但是,我还没有想出如何强制NHibernate使用自定义存储过程来获取按键的实体。 我仍然希望能够调用ISession.Get,如:

using (ISession session = MySessionFactory.OpenSession()) { return session.Get(customerId); } 

还有延迟加载对象,但我希望NHibernate调用我的“GetCustomerById”存储过程而不是生成动态SQL。

可以这样做吗?

考虑到我们必须支持的新环境,NHibernate可能不再合适。

我自己没有尝试过,但你可能想要研究本机sql和自定义加载器概念。

这是Ayende Rahien的一篇好文章: 使用NHibernate和存储过程

这是Scott McMaster基于NH beta版本的另一个易于理解的版本: NHibernate中的存储过程