我想让NHibernate在调用ISession.Get通过键获取实体时调用存储过程,而不是使用dynamic SQL。
我们一直在使用NHibernate,并允许它为查询和插入/更新/删除生成我们的SQL,但现在可能必须将我们的应用程序部署到一个需要我们使用存储过程进行所有数据库访问的环境中。我们可以在.hbm.xml映射文件中使用sql-insert、sql-update和sql-delete进行插入/更新/删除。我们的hql和criteria查询将不得不替换为存储过程调用。
但是,我还没有弄清楚如何强制NHibernate使用自定义存储过程通过实体的键来获取实体。我仍然希望能够调用ISession.Get,如下所示:
using (ISession session = MySessionFactory.OpenSession())
{
return session.Get<Customer>(customerId);
}还有延迟加载对象,但是我希望NHibernate调用我的"GetCustomerById“存储过程,而不是生成动态SQL。
这可以做到吗?
也许NHibernate不再适合我们必须支持的新环境。
发布于 2010-03-20 09:28:15
我自己还没有尝试过,但你可能想了解一下native sql and custom loader的概念。
以下是Ayende Rahien的一篇好文章:Using NHibernate With Stored Procedures
这是Scott McMaster基于NH测试版的另一个更容易理解的版本:Stored Procedures in NHibernate
https://stackoverflow.com/questions/2481494
复制相似问题