Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database NHibernate的数据库独立性?_Database_Nhibernate - Fatal编程技术网

Database NHibernate的数据库独立性?

Database NHibernate的数据库独立性?,database,nhibernate,Database,Nhibernate,我了解NHibernate如何将持久数据库结构与逻辑分离,以及映射是如何工作的,但你们如何处理数据密集型操作、复杂的选择场景、数据维护等?我们使用存储过程来处理类似的事情,实际上我们有很多存储过程 现在推荐的做法是什么?每个db后端都有一组单独的存储过程吗 如果您使用的是存储过程,那么是的,您必须将它们移植到每个后端。您可能可以在NHibernate配置中定义参数化sql语句,但仍然很难找到与数据库无关的语句 最简单的方法是让NHibernate生成SQL,然后根据您使用的数据库更改NHiber

我了解NHibernate如何将持久数据库结构与逻辑分离,以及映射是如何工作的,但你们如何处理数据密集型操作、复杂的选择场景、数据维护等?我们使用存储过程来处理类似的事情,实际上我们有很多存储过程


现在推荐的做法是什么?每个db后端都有一组单独的存储过程吗

如果您使用的是存储过程,那么是的,您必须将它们移植到每个后端。您可能可以在NHibernate配置中定义参数化sql语句,但仍然很难找到与数据库无关的语句

最简单的方法是让NHibernate生成SQL,然后根据您使用的数据库更改NHibernate配置中的数据库方言。但根据你的情况,我认为答案是你必须移植你的程序


换句话说,使用存储过程剥夺了NHibernate在不同数据库中使用的能力,而无需做一些工作。

谢谢。我并不是真的要将我们当前的应用程序移植到NHibernate,在我看来,每个db应用程序最终都会有一些存储过程,这些存储过程在速度上是最好的解决方案,这表明多数据库不是一个简单/廉价的“功能”,尽管中间层(NH)帮助很大。您同意吗?如果您只有少数几个存储过程,并且仍然在大多数sql操作中使用NHibernate,那么我认为迁移到另一个db比在所有操作中使用存储过程更容易。话虽如此,NHibernate所做的远不止生成sql。它跟踪更改、管理对象缓存、对象标识映射、工作单元等。。。这些特性与SQL生成IMHO一样有用,因为手工操作非常困难/繁琐。即使在100%的存储过程环境中,NHibernate仍然具有真正的价值。但是是的,你的进程越多,移动DBs就越不容易。