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