我的直觉告诉我,高级NHibernate用户会反对它,我一直在寻找对此的实际分析并且一无所获,我希望得到解决这些问题的答案:
使用它的优点/缺点是什么? 是否有任何性能影响,无论好坏(例如,使用它来调用存储过程?) 我们应该在哪些情况下使用/避免它? 谁应该使用/避免它?
基本上,使用/避免它的原因是什么?为什么?
答案 0 :(得分:7)
CreateSQLQuery存在的原因是执行以下任一查询:
使用任何其他方法。
当然,这通常是最后的选择,因为:
但如果您认为特定查询需要它,请继续。确保首先学习所有其他方法(HQL,Linq,QueryOver,Criteria和Get)以避免做不必要的工作。
答案 1 :(得分:2)
避免使用SQL并使用HQL的主要原因之一是避免使代码库依赖于RDBMS类型(例如MySQL,Oracle)。另一个原因是您必须使代码依赖于表名和列名,而不是实体名称和属性。
如果您正在将原始SQL与使用NHibernate LINQ提供程序进行比较,那么还有其他令人信服的理由可以使用LINQ查询(当它工作时),例如类型安全性以及能够使用VS引用搜索来确定哪些查询确定表或列被引用。
我的观点是CreateSQLQuery()是一个“最后的出路”选项。它存在是因为有些东西你不能用其他NHibernate API做,但应该避免它,因为它或多或少违背了首先使用NHibernate的整个想法。