【发布时间】:2008-11-15 00:21:03
【问题描述】:
ORM 通常不涉及执行 select * 之类的操作吗?
如果我有一个表 MyThing,其中包含 A、B、C、D 等列,那么通常会有一个对象 MyThing,其属性为 A、B、C、D。
如果该对象没有被如下所示的 select 语句完全实例化,那将是邪恶的,只获取 A、B,而不是 C、D:
select A, B from MyThing /* 不要得到 C 和 D,因为我们不需要它们 */
但总是这样做也是邪恶的:
select A, B, C, D /* 获取所有列以便我们可以完全实例化 MyThing 对象 */
ORM 是否假设数据库访问如此之快,现在您不必担心它,因此您总是可以获取所有列?
或者,您是否有不同的 MyThing 对象,每个对象对应一个可能恰好位于 select 语句中的列组合?
编辑:在回答问题之前,请阅读 Nicholas Piasecki 和 Bill Karwin 的回答。我想我问的问题很糟糕,因为很多人误解了它,但尼古拉斯 100% 理解它。和他一样,我对其他答案很感兴趣。
编辑#2:与此问题相关的链接:
Why do we need entity objects?
http://blogs.tedneward.com/2006/06/26/The+Vietnam+Of+Computer+Science.aspx,尤其是“部分对象问题和加载时间悖论”部分
http://groups.google.com/group/comp.object/browse_thread/thread/853fca22ded31c00/99f41d57f195f48b?
http://www.martinfowler.com/bliki/AnemicDomainModel.html
http://database-programmer.blogspot.com/2008/06/why-i-do-not-use-orm.html
【问题讨论】:
-
也许问题出在标题上——“select *”而不是“select x,y,z”?
-
您使用的是哪个 ORM,哪个执行 SELECT *?我用过 llblgen 和 nhibernate,都拼出要获取的每一列
标签: orm