【问题标题】:ADO.NET: do you have lots of stored procedure in your own systems?ADO.NET:您自己的系统中有很多存储过程吗?
【发布时间】:2011-01-27 06:15:06
【问题描述】:

大家好 我们知道 SqlCommand 对象的 CommandType 属性有 3 个选项:TableDirect、Text 和 StoredProcedure 或“SP”。

知道“SP”比其他两个选项有好处,我的问题是您是否在自己的系统中制作了大量的 SP?

或者你有什么解决方案而不是创建 SP?

谢谢

【问题讨论】:

    标签: stored-procedures ado.net sqlcommand


    【解决方案1】:

    除了创建存储过程,您还可以使用对象关系映射

    如:

    linq to sql
    Nhibernate
    Entity Framework
    

    Data Access :SP's vs ORMs

    选择最适合您的方式。

    【讨论】:

      【解决方案2】:

      在所有生产系统中,我使用 SP 和纯 ADO.NET Core 来访问数据。系统有 100-300 个表和大约 500-1000 个存储过程。

      大部分数据访问代码是使用工具生成的。如果您有兴趣使用/修改它,我已经在我的博客上发布了源代码和示例应用程序。该工具可以在大约 20-25 秒内生成超过 100,000 行代码,以针对具有大约 750 个存储过程的数据库。

      Data Access Layer - Code Gen

      当然,如果您不熟悉数据库、数据建模/设计和存储过程,您最好使用 Linq to SQL 或 EF4(实体框架版本 4)或类似工具。如果您需要蛮力性能,那么 ADO.NET 核心以及存储过程是您的最佳选择。

      【讨论】:

      • 在这种情况下,对于像获取代码描述这样的简单任务,我们需要编写一个“SP”。在您看来,这真的是一个好的解决方案吗?
      • 这取决于几个因素: 1) 您的系统设计。 2) 系统的性能要求(您必须能够处理的每秒事务数) 3) 如果为和您的团队编写存储过程就像编写任何代码并且您拥有生成 C# 端的工具您的代码只是因为您编写了一个存储过程(因此您实际上并不是在编写数据访问代码,而只是在业务层中调用了调用 SP 的数据访问层中的方法的代码)。
      • 是的,我确实认为这是一个很好的解决方案(如果我不这样做我就不会这样做:))。
      【解决方案3】:

      回复:您的第一个问题 当您沿着存储过程的路径前进时,存储过程的数量开始在项目的生命周期内持续增长。在基本的 CRUD 操作之外,每个存储过程都倾向于与特定问题紧密绑定,并且不能很好地重用。一个经验法则是,我可以预期每个数据表(不包括参考或代码表,例如州或国家列表)有 8-12 个存储过程。

      大量的 procs 使得命名约定非常重要,这样您就可以找到任何东西,而无需不断地重新扫描整个 400-500 procs 列表。

      回复:你的第二个问题 在 C# 或 VB.NET 的字符串中编写 sql 会发生很多丑陋的事情——它容易出错、丑陋等等。

      存在 Linq、nHybernate 和许多其他工具,但“概念计数”(您需要学习的东西的数量才能开始高效工作)远高于学习如何用 C# 编写好的存储过程执行器。

      【讨论】:

      • 感谢您的评论,正如您所说,当 SP 的数量逐渐增加时,命名约定似乎非常重要。你如何命名自己的 SP?
      • 最有价值的事情是模拟一个命名空间,例如与人力资源相关的所有内容都是“hr_some_proc”,如果您使用 sql 2005+ 模式,则为“hr.some_proc”。用“usp_”作为前缀根本没有用,例如“用户存储过程”,因为存储过程是存储过程是毫无疑问的。请记住,这就像命名空间,而不是匈牙利符号。
      【解决方案4】:

      我尝试确保仅为数据库功能而非业务逻辑创建存储过程。

      这是数据库功能,当我有一些有点模糊的数据库架构并且我想对调用者隐藏它时。

      它是业务逻辑,它只是我的应用程序添加或更新的方式,或者它们进行了多少验证等等。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多