Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net ORM还是直接SQL?_.net_Performance_Orm - Fatal编程技术网

.net ORM还是直接SQL?

.net ORM还是直接SQL?,.net,performance,orm,.net,Performance,Orm,可能重复: 您会选择使用ORM或某种家用DAL吗?为什么 ORM的优点似乎很明显——更好的结构/组织,更好的语言适合性等等。但我担心性能问题。有人要分享战争故事吗?任何关于不太明显的风险或回报的见解都将不胜感激。我将把这作为我的个人观点,因为这是一个神圣的话题 每次我开始一个项目并尝试一个ORM(无论是L2SQL、亚音速、EF NHibernate等),我总是在某个时候放弃它,并使用存储过程手工重写DAL ORM对于快速搭建非常方便,但是如果您正确设计了实体层,插入新的数据访问层是非常简单的,

可能重复:

您会选择使用ORM或某种家用DAL吗?为什么


ORM的优点似乎很明显——更好的结构/组织,更好的语言适合性等等。但我担心性能问题。有人要分享战争故事吗?任何关于不太明显的风险或回报的见解都将不胜感激。

我将把这作为我的个人观点,因为这是一个神圣的话题

每次我开始一个项目并尝试一个ORM(无论是L2SQL、亚音速、EF NHibernate等),我总是在某个时候放弃它,并使用存储过程手工重写DAL


ORM对于快速搭建非常方便,但是如果您正确设计了实体层,插入新的数据访问层是非常简单的,并且我遇到了太多的问题,我要么与ORM斗争以实现我的目标,要么ORM只是在做一些愚蠢的事情(N+1查询,或者当我真的只需要主键查找时下拉相关表等)。

我会使用ORM,原因正是您提到的

它们通常表现得很好。如果某个领域存在性能问题,您可以在以后对该部分进行优化,或者在真正有帮助的情况下切换到纯SQL,因为这两种技术并不相互排斥。

我愿意(也愿意)选择使用ORM,并学习它是如何工作得足够好,从而尽可能多地利用它的性能的

例如,大多数ORM允许您使用大量存储过程/服务器功能,这样您就可以在最佳位置运行高度优化的代码,但您必须知道如何/何时这样做

还有一些技术可以用于ORM的底层。例如,将LINQ编译为SQL查询


我认为很多时候,滚动开发自己的DAL并不能带来更好的性能,仅仅因为一个人试图重新创建大量样板代码。

我会说使用ORM。起初我有点反对他们,因为编写直接SQL对于简单的项目来说非常容易,我没有看到额外的好处。但是作为你的项目随着时间的增长,查询变得越来越复杂。特别是对于……如果你的ORM支持这些类型的东西,它确实节省了很多时间


如果您担心性能问题,请等到它开始成为问题,然后检查您的ORM生成的SQL,并使用它的原始SQL函数更有效地重写它,或者使用其他辅助方法引导它朝正确的方向发展。

这在很大程度上取决于应用程序,以及它将扩展到多大程度同样,如果你担心性能,那么你在编程语言方面也有同样的难题,IMHO ORM真的很适合你,你已经说过了,但是它们(就像所有东西)都有边界系列,大部分都是性能的,你最终将不得不处理查询,不管你称它们为SQL还是HQL,或者任何其他的SUTFF-QL


我的建议是,如果您选择ORM,然后尝试利用其所有功能许多项目最终使用ORM,只保存更新删除,而不使用层次结构模式或缓存改进

如果任何一种选择都能满足任何业务需求,我会感到惊讶。我还怀疑是否有许多缺陷可以直接归因于eith呃选择

就我个人而言,我发现数据进出数据源非常容易,通常我不会花很多时间,但那可能就是我


我想说,除非你对其中一个有强烈的偏好,否则这可能无关紧要。

我认为这取决于你在做什么样的项目。如果你在使用某种OO语言编程,那么使用ORM可能是个好主意。但是如果你的项目级别较低,或者你真的担心性能(我相信设计好的ORM不会让你表现不佳)那么直接sql可能是最好的选择。

+1强调ORMs/pure sql是如何互不排斥的。是的……大多数ORMs都有一个函数专门允许您编写直接sql。我发现CakePHP在这方面非常糟糕,但Django实际上做得很好。偶尔您必须引导它朝着正确的方向,但它们会ave功能也可以控制这一点。