.net - 混合存储过程业务逻辑和 ORM

标签 .net stored-procedures orm architecture migration

我工作的公司开发了一个几乎完全基于存储过程的大型应用程序。

我们使用经典的 ASP 和 SQL Server,业务逻辑的主要部分包含在这些存储过程中。

例如,(我知道,这很糟糕……)单个存储过程可以用于不同的目的(插入、更新、删除、进行一些计算……)。大多数时候,存储过程用于对相关表进行操作,但情况并非总是如此。

我们计划在不久的将来迁移到 ASP.NET (WebForms)。

我在 StackOverflow 上阅读了很多建议我将业务逻辑移到数据库之外的帖子。 问题是,我试图说服在我们公司做出决定的人,我无法改变他们的想法

由于我希望能够利用面向对象编程的优势,所以我想将表映射到实际的类。 到目前为止,我的解决方案是使用 ORM(Entity Framework 4 或 nHibernate)来避免手动映射对象(主要是检索数据) 并使用某种数据访问层来调用现有的存储过程(用于保存)。

我需要你的建议。 你认为这是一个好的解决方案吗?有什么想法吗?

编辑:我应该只使用标准的 DataTable/DataRow 方法吗?

最佳答案

在我看来

出于很多很多原因,存储过程是您的 friend 。我强制在项目的存储过程中执行所有数据库操作,并锁定应用程序在 SQL 服务器上的帐户,只允许它执行存储过程(不能直接访问任何类型的表)。尽管如此,在同一个过程中混合更新/删除仍然让我觉得是一种糟糕的做法(尽管我倾向于在同一个过程中组合插入/更新)。

另请注意:当您从 ASP 迁移到 ASP.NET 时,存储过程中的任何逻辑都不必重新实现,因为它存在于 Web 代码之外。 +100 分用于将查询保留在它们所属的位置。

如今,普遍的“智慧”表明您应该只将数据库服务器用作对象存储,我强烈反对这一观点。我有几个项目,在服务多年后,突然需要与其他用不同语言编写的应用程序共享数据和逻辑。将大部分数据库代码实际放在数据库中,并在应用程序代码之外,这使得项目之间的代码重复变得非常简单和最小化。

将 ORM 与存储过程混合听起来是一种在年轻时减肥和头发的好方法。

将现有应用程序从当前数据模型切换到 ORM,除了从 ASP 迁移到 ASP.NET MVC 的复杂性之外,还为本已具有挑战性的任务添加了许多变量和故障点。如果您不能向 Powers That Be 提出令人信服的论据,证明 ORM 是一个好主意,您可能会问自己为什么会这样。

关于.net - 混合存储过程业务逻辑和 ORM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4672450/

相关文章:

java - 存储过程

javascript - 做 Sequelize 关联 在数据库端做任何事情

java - Hibernate Parent/Child SELECT N+1 问题

c# - 如何在 C# 中按降序版本列表排序?

.net - CoreCLR的standalone GC有read barrier的接口(interface)吗?

mysql - 优化mysql if elseif和else逻辑

Hibernate - 查询缓存/二级缓存不适用于包含子项的值对象

c# - Windows 窗体设计器和通用窗体

c# - 是否有任何机制可用于在基于 Windows CLR 的平台上使用 LDMA 或 RDMA?

asp.net - 同时从2个表中删除?