关于使用NHibernate CreateSQLQuery的建议是什么?
我的直觉告诉我,高级NHibernate用户会反对它,我一直在寻找对此的实际分析,但没有发现任何结果,我想找到解决这些问题的答案: 使用它的优点/缺点是什么? 是否存在任何性能影响,无论是好的还是坏的(例如,使用它调用存储过程?) 在哪些情况下我们应该使用/避免它? 谁应该使用/避免它关于使用NHibernate CreateSQLQuery的建议是什么?,sql,nhibernate,Sql,Nhibernate,我的直觉告诉我,高级NHibernate用户会反对它,我一直在寻找对此的实际分析,但没有发现任何结果,我想找到解决这些问题的答案: 使用它的优点/缺点是什么? 是否存在任何性能影响,无论是好的还是坏的(例如,使用它调用存储过程?) 在哪些情况下我们应该使用/避免它? 谁应该使用/避免它 基本上,使用/避免它的原因是什么?为什么?避免使用SQL和HQL的主要原因之一是避免使代码库依赖于RDBMS类型(例如MySQL、Oracle)。另一个原因是,您必须使代码依赖于表名和列名,而不是实体名和属性 如
基本上,使用/避免它的原因是什么?为什么?避免使用SQL和HQL的主要原因之一是避免使代码库依赖于RDBMS类型(例如MySQL、Oracle)。另一个原因是,您必须使代码依赖于表名和列名,而不是实体名和属性 如果您将原始SQL与使用NHibernate LINQ提供程序进行比较,那么使用LINQ查询(当它工作时)还有其他令人信服的原因,例如类型安全性以及能够使用VS reference search来确定在哪些查询中引用了某个表或列
我的观点是CreateSQLQuery()是一个“最后的出路”选项。它之所以存在,是因为有些事情您无法使用其他NHibernate API,但应该避免,因为它或多或少违背了最初使用NHibernate的整个想法 避免使用SQL和HQL的主要原因之一是避免使代码库依赖于RDBMS类型(例如MySQL、Oracle)。另一个原因是,您必须使代码依赖于表名和列名,而不是实体名和属性 如果您将原始SQL与使用NHibernate LINQ提供程序进行比较,那么使用LINQ查询(当它工作时)还有其他令人信服的原因,例如类型安全性以及能够使用VS reference search来确定在哪些查询中引用了某个表或列
我的观点是CreateSQLQuery()是一个“最后的出路”选项。它之所以存在,是因为有些事情您无法使用其他NHibernate API,但应该避免,因为它或多或少违背了最初使用NHibernate的整个想法 CreateSQLQuery存在的原因是执行以下查询之一:
- 不支持
- 难写
- 它不是面向对象的(也就是说,您重新考虑表和列,而不是实体、属性和关系)
- 它将您与物理模型联系在一起
- 它将您绑定到特定的RDBMS
- 它通常会迫使您做更多的工作来检索实体
- 它不自动支持分页等功能
但如果您认为某个特定查询需要它,请继续。确保首先学习所有其他方法(HQL、Linq、QueryOver、Criteria和Get),以避免做不必要的工作。CreateSQLQuery的存在是有原因的,这就是执行以下查询:
- 不支持
- 难写
- 它不是面向对象的(也就是说,您重新考虑表和列,而不是实体、属性和关系)
- 它将您与物理模型联系在一起
- 它将您绑定到特定的RDBMS
- 它通常会迫使您做更多的工作来检索实体
- 它不自动支持分页等功能
但如果您认为某个特定查询需要它,请继续。确保首先学习所有其他方法(HQL、Linq、QueryOver、Criteria和Get),以避免做不必要的工作。我预计会有最坏的缺点,我的意思是,即使这是最后一个选项,看起来也没有那么糟糕,性能如何?不应该有任何明显的区别。我预计会有最坏的缺点,我的意思是,即使它是最后一个选项,看起来也没有那么糟糕,性能呢?应该没有任何明显的区别。