【发布时间】:2011-01-27 06:15:06
【问题描述】:
大家好 我们知道 SqlCommand 对象的 CommandType 属性有 3 个选项:TableDirect、Text 和 StoredProcedure 或“SP”。
知道“SP”比其他两个选项有好处,我的问题是您是否在自己的系统中制作了大量的 SP?
或者你有什么解决方案而不是创建 SP?
谢谢
【问题讨论】:
标签: stored-procedures ado.net sqlcommand
大家好 我们知道 SqlCommand 对象的 CommandType 属性有 3 个选项:TableDirect、Text 和 StoredProcedure 或“SP”。
知道“SP”比其他两个选项有好处,我的问题是您是否在自己的系统中制作了大量的 SP?
或者你有什么解决方案而不是创建 SP?
谢谢
【问题讨论】:
标签: stored-procedures ado.net sqlcommand
除了创建存储过程,您还可以使用对象关系映射
如:
linq to sql
Nhibernate
Entity Framework
选择最适合您的方式。
【讨论】:
在所有生产系统中,我使用 SP 和纯 ADO.NET Core 来访问数据。系统有 100-300 个表和大约 500-1000 个存储过程。
大部分数据访问代码是使用工具生成的。如果您有兴趣使用/修改它,我已经在我的博客上发布了源代码和示例应用程序。该工具可以在大约 20-25 秒内生成超过 100,000 行代码,以针对具有大约 750 个存储过程的数据库。
当然,如果您不熟悉数据库、数据建模/设计和存储过程,您最好使用 Linq to SQL 或 EF4(实体框架版本 4)或类似工具。如果您需要蛮力性能,那么 ADO.NET 核心以及存储过程是您的最佳选择。
【讨论】:
回复:您的第一个问题 当您沿着存储过程的路径前进时,存储过程的数量开始在项目的生命周期内持续增长。在基本的 CRUD 操作之外,每个存储过程都倾向于与特定问题紧密绑定,并且不能很好地重用。一个经验法则是,我可以预期每个数据表(不包括参考或代码表,例如州或国家列表)有 8-12 个存储过程。
大量的 procs 使得命名约定非常重要,这样您就可以找到任何东西,而无需不断地重新扫描整个 400-500 procs 列表。
回复:你的第二个问题 在 C# 或 VB.NET 的字符串中编写 sql 会发生很多丑陋的事情——它容易出错、丑陋等等。
存在 Linq、nHybernate 和许多其他工具,但“概念计数”(您需要学习的东西的数量才能开始高效工作)远高于学习如何用 C# 编写好的存储过程执行器。
【讨论】:
我尝试确保仅为数据库功能而非业务逻辑创建存储过程。
这是数据库功能,当我有一些有点模糊的数据库架构并且我想对调用者隐藏它时。
它是业务逻辑,它只是我的应用程序添加或更新的方式,或者它们进行了多少验证等等。
【讨论】: