从使用 ORM 的应用程序的角度来看,执行自定义查询比在离散映射类型(例如视图)上执行选择要困难得多。
例如,如果您只需要一个表的 5 个字段(比如 30 或 40 个),那么 ORM 框架将创建一个实体来表示该表。
这意味着即使您只需要实体的一些属性,ORM 框架生成的选择查询也会使整个实体焕然一新。另一方面,视图虽然也映射到使用 ORM 框架的实体,但只会带来您需要的数据。
其次,由于 ORM 框架将实体映射到表,实体之间的关系是在客户端生成(和水合)的,这意味着查询必须执行并返回到应用程序,然后这些实体的链接才能在应用程序的运行时发生。
一些框架通过在一个巨大的选择(具有多个连接)中返回来自多个链接实体的数据来绕过这一点,在一次调用中引入所有相关表的列。在内部,框架分解了巨大的结果集,并在将这些实体返回给调用者应用程序之前构建了链接实体的逻辑表示。
重点是视图是使用 ORM 的应用程序的救星。另一种方法是手动进行数据库调用,并将生成的记录集手动传递到可用的实体/模型中。
虽然这种方法很好并且肯定会产生结果,但它有很多负面的方面。手动代码...是手动的;难以维护,实施繁琐,并导致开发人员更多地担心 DB 提供程序 API 与逻辑域模型的细节。更不用说它增加了开发、维护、错误的表面积等的生产时间(它更加费力)成本。
因此,对于任何说观点不好的人,请考虑事情的另一面;那些高高在上的 DBA 最常不知道的东西。