首页 / 知识
关于orm:使用NHibernate进行查询的最佳实践
2023-04-14 04:22:00

Best practices for querying with NHibernate在使用其他技术(CSLA和Subsonic)几年之后,我又回到了NHibernate的使用,我发现查询有点令人沮丧,尤其是与Subsonic相比。 我想知道人们正在使用其他什么方法? Hibernate Query Language不适用于我,似乎太像编写SQL,在我看来,这是使用ORM工具的原因之一,因此我不必再使用XML,这意味着 可重构性差,并且错误只会在运行时发现? 条件查询,似乎不够流畅。 我读过Ayende的NHibernate查询生成器,它是一个有用的工具,这是人们在使用的东西吗? 还有什么呢?
编辑:值得一读 LINQ for NHibernate仍在测试阶段。我期待NHibernate 2.1,他们说它最终会成功。 大约一个月前,我在NHQ的LINQ上进行了演示,您可能会发现它很有用。我在这里写了关于它的博客,包括幻灯片和代码: LINQ for NHibernate:Visual Studio 2008幻灯片和代码中的O / R映射 要摆脱XML,请尝试Fluent NHibernate Linq2NH尚未完全烘焙。核心团队正在与NH Contrib进行不同的实施。不过,它适用于简单查询。尽量不要使用,以取得最佳效果。
至于如何查询(hql相对于Criteria相对于Linq2NH),请在存储库接口上公开意图揭示方法( 我发现Criteria API繁琐,有限但灵活。 HQL更像是我的风格(它比SQL更好-它是基于对象的,而不是基于模式的),并且对于简单的GetX方法来说似乎更适合我。 LINQ-to-NHibernate和Ayende的NHQG的替代方法是从C#3表达式生成NHibernate表达式/限制。这样,您可以获得类型更严格的Criteria API。 看到:
我默认将Linq用于NHibernate。当我遇到错误或限制时,我会切换到HQL。 如果将所有查询放在一个数据访问类(例如存储库)中,那么这是一种干净的方法。
您询问有关重构的问题。显然,IDE可以处理LINQ,因此,对于所有剩余的HQL,扫描这些存储库类并手动更改HQL相当容易。 将HQL放在XML文件中是一个好习惯,也许看看ReSharper NHIbernate插件现在是否可以处理查询重构? 编写或重构查询(HQL或LINQ)时的一个重大改进是将查找器方法置于单元测试之下。这样,您可以快速调整HQL / LINQ,直到出现绿色条。编译/测试/反馈循环非常快,尤其是当您使用内存数据库进行测试时。 另外,如果您在重构后忘记编辑HQL,则单元测试应使您很快了解损坏的HQL。 如果可以的话,请废弃nHibernate并返回Subsonic。在我看来,Subsonic是一种更加流畅和可测试的ORM / DAL。我绝对讨厌HQL在ORM中进行弱类型查询的目的是什么?当我只能使用Linq进行SQL并切出一层时,为什么还要使用Linq / nH / SQL? 当Subsonic不在时,nHibernate是一个很好的ORM,但是现在,与之相比,它简直太糟糕了。与nHibernate和Subsonic相比,我花了2倍的时间轻松完成工作。由于nHibernate是运行时,因此进行测试很麻烦,因此现在我需要聘请一些QA工程师来"单击"该站点,而不会出现编译时错误。 |
最新内容
相关内容
linux查询分辨率命令?
linux查询分辨率命令?,情况,设备,系统,分辨率,数据,命令,屏幕,屏幕分辨率,桌面,终端,linux下怎么通过命令改分辨率1、使用xrandr查询,带“*”的linux常用命令查询?
linux常用命令查询?,工作,地址,系统,信息,命令,目录,管理,标准,常用命令,控制台,linux常用命令linux系统常用操作命令如下:ls:全拼list,功能是列linux命令查询汉语?
linux命令查询汉语?,工作,地址,系统,信息,命令,目录,标准,状态,软件,亚洲,基本linux命令1、linux系统常用操作命令如下:ls:全拼list,功能是列出目linux下查询历史命令?
linux下查询历史命令?,地址,信息,系统,服务,数据,连续,命令,数字,名称,环境,linux下学习history命令的用法实例使用 HISTCONTROL 从命令历史中linux查询表结构命令?
linux查询表结构命令?,系统,标准,信息,数据,地址,设备,时间,适当,软件,命令,linux下怎么用tree命令以树形结构显示文件目录结构1、以Ubuntu为linux网络命令查询?
linux网络命令查询?,信息,网络,系统,地址,工作,状态,技术,电脑,命令,设备,linux查看系统网卡信息命令?方法一:ethtool eth0 采用此命令可以查看linux查询子目录命令?
linux查询子目录命令?,信息,系统,命令,名称,文件,名字,管理,软件,灵活,工具,Linux下Grep命令的详细使用方法?1、查找root目录下包含Linux的文linux查询状态的命令?
linux查询状态的命令?,系统,状态,信息,管理,数据,情况,命令,综合,电脑,工具,linux怎样使用top命令查看系统状态1、top命令用于动态的监视进程linux地址查询命令?
linux地址查询命令?,地址,网络,系统,工作,信息,设备,名称,标准,手机,管理,linux常用命令1、linux系统常用操作命令如下:ls:全拼list,功能是列出目linux查询id命令?
linux查询id命令?,信息,系统,密码,地址,用户,命令,数据,术语,用户名,用户信息,linux查看已存在的用户linux用tail查看用户是否存在/etc/group命令查询linux版本?
命令查询linux版本?,系统,信息,名称,状态,电脑,设备,工具,软件,版本,命令,在Linux命令行下查询当前所使用的shell版本与种类的方法1、一旦你知linux7查询路由命令?
linux7查询路由命令?,网络,系统,信息,工作,地址,情况,命令,通信,工具,检测,在Linux中查询路由器的情况,用什么命令1、Is -1 是 Linux中显示当