【发布时间】:2011-03-03 05:16:58
【问题描述】:
在我使用 ORM 的有限经验(到目前为止,LLBL Gen Pro 和 Entity Framework 4)中,我注意到查询本质上会返回所有列的数据。我知道 NHibernate 是另一种流行的 ORM,我不确定这是否适用,但我认为它适用。
当然,我知道有一些解决方法:
- 创建 SQL 视图并在视图上创建模型和映射
- 使用存储过程并在返回的结果集上创建模型和映射
我知道坚持某些做法可以帮助缓解这种情况:
- 确保在选择数据时合理限制行数
- 确保您的表格不会过宽(大量列和/或大型数据类型)
所以这是我的问题:
以上做法是否足够,还是我仍应考虑寻找限制返回列数的方法?
除了我上面列出的之外,还有其他方法可以限制返回的列吗?
您通常如何在您的项目中处理此问题?
提前致谢。
更新:这种想法源于SELECT * 被认为是一种不好的做法。见this discussion。
【问题讨论】:
-
是否存在性能问题?一些框架提供更细粒度的控制,但对于大多数记录,我怀疑 查询 比提取/返回数据本身更“昂贵”(对于正常情况)——当然,使用 大型数据字段...事情开始发生变化。
-
见我上面的更新。我一直听说
SELECT *是一种不好的做法。当然,我知道这有点不同,部分原因是即使你的表发生变化,它也会返回所有行——而 ORM 不会遇到这个问题。但另一个论点是带宽消耗,这确实适用于 ORM。 -
LLBLGen 允许您从实体中删除列。您还可以拥有同一实体的不同版本(例如完整版和“精简”版)。
-
此外,LLBLGen 允许您使用 IncludeFields 列表或 ExcludeFields 列表。但是,您仍然可以取回所有密钥(这是有道理的)。
标签: nhibernate entity-framework orm entity-framework-4 llblgenpro