从历史上看,除了最基本的应用程序之外,我完全反对使用ORMS.
我的理由一直是,它是一个非常漏洞的抽象...主要是因为SQL提供了一种非常强大的方法来从关系源中检索数据,这通常会被ORM搞砸,这样你就会失去很多性能来获得没有关系后端的外观.
我一直以为DATA应该始终保存在数据库中,而不是吃掉那些无法扩展的应用程序内存.此外,对通用性能的影响是有害的.例如,如果我需要数据库的所有客户端的名称和地址,SQL在一个查询中为我提供了一种简单的方法来获取它.使用ORM我需要获取所有客户端,然后是每个名称和地址,即使它是懒惰加载它也会花费更多时间.
这就是我的想法,但上面的任何改变了吗?我看到很多ORMS,比如Entity Framework,NHibernate等.最近他们似乎有很多人气......他们值得吗?他们解决了我上面描述的问题吗?
请阅读:所有抽象都是失败的抽象它应该提出很多你的问题.
性能通常不是ORM的问题 - 如果您确实发现自己处于某种情况,那么通常总是可以选择手工编写ORM使用的SQL语句.
恕我直言,ORM为您提供即时和巨大的开发速度.这就是他们如此受欢迎的原因.正确使用它们并不会让你自己在角落里画画.总是可以选择手动调整性能.
编辑:
尽管Jeff专注于Linq to SQL,但他所说的抽象和性能对于NHibernate来说同样如此(我从多年的真实应用程序开发中知道).恕我直言,默认情况下应该使用ORM,因为它们对于臭名昭着的90%的情况来说足够快.读取为ORM编写的代码通常更易于维护和读取,尤其是当您的代码被继承您的代码的下一个开发人员选中时.总是编码好像最终维护你的代码的人是一个知道你住在哪里的暴力精神病患者.别忘了那家伙!
此外,他们提供开箱即用的缓存,延迟加载,工作单元......你的名字.我发现当我对ORM的表现不满意时,这是我的错.ORM会强制您遵守良好的OO设计实践并帮助您塑造您的域模型.