Stored procedures 如果我使用存储过程,我会使用ORM吗?

Stored procedures 如果我使用存储过程,我会使用ORM吗?,stored-procedures,orm,Stored Procedures,Orm,如果我使用存储过程,我可以使用ORM吗 编辑: 如果我能使用ORM,这不就是使用ORM的部分数据库不可知性原因吗?换句话说,如果我用存储过程将自己绑定到一个特定的数据库(或者这个假设是错误的),我为什么还要使用ORM呢?是的,你可以,所有主要的ORM都支持存储过程 至于您的假设,您尤其正确,当您将存储过程与ORM一起使用时,您将项目耦合到特定的数据库。但实际上,99%的情况下您不需要更改数据库提供程序,因此在本例中,您使用ORM不是为了从具体的数据库提供程序中抽象,而是为了帮助自己完成对象关系映

如果我使用存储过程,我可以使用ORM吗

编辑:


如果我能使用ORM,这不就是使用ORM的部分数据库不可知性原因吗?换句话说,如果我用存储过程将自己绑定到一个特定的数据库(或者这个假设是错误的),我为什么还要使用ORM呢?

是的,你可以,所有主要的ORM都支持存储过程


至于您的假设,您尤其正确,当您将存储过程与ORM一起使用时,您将项目耦合到特定的数据库。但实际上,99%的情况下您不需要更改数据库提供程序,因此在本例中,您使用ORM不是为了从具体的数据库提供程序中抽象,而是为了帮助自己完成对象关系映射任务—这是ORM的主要任务,ORM最初是为其制作的。

您可以,但许多更高级的ORM特性往往会变得更麻烦。类似的东西很容易与存储过程集成,而更复杂的引擎更复杂的功能,如(N?)Hibernate式的动态SQL生成和大字段的延迟加载,可能会变得非常麻烦。

使用ORM访问存储过程是ORM的最佳用途之一。它将为您提供强类型对象,而您仍然可以完全控制SQL。

它提出了一个有趣的观点

一旦有了ORM和相对简单的查询,为什么需要存储过程?SP与数据库紧密相连。ORM使您无需维护大量特定于DB的代码。可以隔离和管理特定于数据库的内容

我认为ORM是一个黄金机会,可以降低复杂性并将所有处理放在它所属的代码中

使用数据库做它最擅长的事情——存储数据


将应用程序用于它最擅长的工作——处理数据。

根据我的经验,我会让ORM处理“CRUD”操作,并将专业工作留给存储过程。一般来说,使用存储过程进行“CRUD”操作是一种过激的行为,让ORM来处理它可以极大地提高您的生产效率。

是的,您可以这样做,但您需要花一些时间研究ORM在存储过程方面提供了哪些功能

Most将允许您运行返回强类型对象/实体的存储过程。更高级的ORM将允许您插入存储过程来执行CRUD操作(因此您的通用查询、删除等将通过存储过程而不是动态查询进行)

一般来说,ORM对于生成特殊查询和获取强类型实体非常有用,但拥有强大的存储过程支持的好处是(有时)允许您更容易访问RDM的本机功能,这些功能可能不会在ORM中作为一等公民公开-尤其是在ORM支持许多数据库引擎的情况下

从编辑开始的后续操作:

通常您会希望使用ORM提供的即席查询引擎,但正如我前面提到的,有时您希望使用ORM未公开的功能进行查询

强类型实体的好处是非常宝贵的,因为它意味着您通常拥有域对象,而不是数据读取器、数据表等。您可以在检索到的实体中干净地封装行为和逻辑


附加好处的列表确实很长-例如,使用LightSpeed ORM(以及大多数其他),您的实体将支持标准绑定接口、错误报告接口、验证等。在查询端,除非您自己编写,否则您将失去延迟加载等功能。

数据库“不可知性”(?)不是使用ORM的唯一原因。但是,您可以利用与DB的交互中99%与DB无关的优势,并且在1%(或2%或10%或任何情况下)中,您可能需要存储过程以提高速度/清晰度/复杂性。如果您更改了DBs,则需要重写它们。

我在工作中经常使用netTiers,我们让它为我们生成存储过程。这些只处理基本的积垢操作,但它们非常快,节省了我大量的时间。netTiers还允许我们创建自定义存储过程,并使用这些过程生成数据访问代码。

您可以同时使用ORM功能和存储过程功能。特别是使用ORM,直到它适合您为止,但如果您在性能方面遇到一些问题或需要一些低级调整,请在业务逻辑中包括存储过程。

我相信,任何让您从重做工作中解脱出来并集中精力解决问题的工具都是有效的。当涉及到基本CRUD操作时,ORM似乎就是那个工具——即使使用SPs更好地实现需求(就像在钉子上使用锤子,它正是执行任务的合适工具)

重点是:没有黑色或白色,只有一个灰度级。非常不完善和编码糟糕的应用程序以“DB不可知论”为借口来解释对DB资源的过度使用。在许多情况下,与数据库紧密联系也不好。目标是:在不浪费客户IT资源的同时,最大限度地实现“DB不可知论”


没有“新旧之争”,只是人们说极端的“纯”方法更好。我真的不这么认为。我相信,与任何工具一样,“最好”(注意引号)的方法是使用ORM,直到它仍然是使您能够访问数据的正确工具。当您达到浪费资源、降低可扩展性和TI资源的“生命价值”(我忘记了英语中相当于葡萄牙语“vidaútil”)时,在ORM中使用SPs。或者,换言之,在手边加工时使用SP,就像锤子在指甲上一样。

这不是一个巨大的争论吗?SP和no SP。有些人喜欢争论它。我们中的其他人已经厌倦了尝试