【发布时间】:2013-03-08 23:02:29
【问题描述】:
这不是关于 SP 是好是坏的问题。或者用 C# 写 SQL 语句是好是坏。
很快我们就开始着手一个新项目,这是一个典型的库存/计费管理系统。这将使用 .Net 和 C# 作为语言进行开发。数据库尚未最终确定。
在此应用程序中不允许使用存储过程,它将具有中等到复杂的数据库操作。因此,我可以使用 SP 轻松编写的逻辑,现在我必须使用 C# 和 ADO.Net 编写。
现在采用一个非常假设的用例,其中客户选择了 5 件商品并准备在柜台生成账单……。这通常具有以下数据库操作:
- 检查 INVENTORY 表以查看是否所有 5 个订单项都可用(数量充足)。
- 如果任何项目不可用 - 从账单中删除项目并更新 BILL 表
- INVENTORY 表的数量字段将被更新,数量字段将扣除已售出的商品。
- 提醒/更新其他表是某个项目的阈值数量低于某个点。
现在看看这个场景,这一切都可以在 SP 中轻松完成。这包含很多查询、IF 条件、可能的循环等,看起来像是 SP 的一个很好的竞争者。 我想从专家那里得到的是:
- 是否有在 C# 和 ADO.Net 中编写此类代码的最佳实践。在 C# 中,我们通常可以使用 ADO.Net 重新创建相同的代码……。但这是唯一的方法还是正确的方法?
- 我读过很多人说存储过程很糟糕……。但是在考虑这样的复杂场景时……您不觉得存储过程更适合这种情况吗?
【问题讨论】:
-
嗨 Yuvi,我建议您的 ADO.net 是指实体框架/LINQ2SQL 之类的东西?为什么要创建一个难以维护的地狱查询?为什么不创建多个查询创建一个事务?
-
@Jordy van Eijk,我并不是说所有这些都将使用大查询创建。我要说的是,这将导致在 C# 中使用 if 条件和可能的循环进行大量查询。所以我的问题是在 C# 和 ADO.Net(或实体框架)中这样做的最佳实践是什么?
-
存储的 Proc 是有用的脚本,用于管理数据库、修改、批处理、帮助进行复杂查询(您的应用程序应该从一开始就避免这样做)像 shell 脚本(bash , ksh, PowerShell..) 可以做 for-loop, if.. 和很多事情。但是我们只用它们来管理操作系统,几乎没有用它们来构建软件。 IMO,数据访问层的“正确方法”是将复杂查询分解为许多小查询与缓存解决方案(redis,内存数据库..)相结合。如今,材料很便宜,可测试、可行和高质量的应用却很昂贵。
标签: c# stored-procedures ado.net