【问题标题】:If using LINQ to SQL is there any good reason to learn SQL queries/syntax anymore?如果使用 LINQ to SQL 是否有充分的理由再学习 SQL 查询/语法?
【发布时间】:2009-04-30 12:58:45
【问题描述】:

由于以前使用 ASP.NET Web 表单和存储过程的工作,我确实了解 SQL 查询和语法,但我不会称自己为这方面的“专家”。

自从我一直在使用 ASP.NET MVC 和 LinqToSql 以来,似乎已经为我完成了很多繁重的工作并在 SQL 端进行了封装,我怀疑继续充值是否有任何好处我对 SQL 查询的了解,或者我是否最好将“学习时间”集中在其他事情上。

你的想法?

【问题讨论】:

  • 任你选择!我也面临同样的事情。但是,如果您决定将自己迁移到 LINQ,请从 LINQPad 开始。它的教程将永远帮助你。

标签: asp.net-mvc linq linq-to-sql


【解决方案1】:

您应该绝对了解 SQL 并保持最新知识。 ORM 旨在减轻您做一些繁琐但您知道该怎么做的痛苦,就像图形计算器旨在做一些您可以手动完成的事情(并且应该知道如何做)。

从您开始让 ORM 在数据库中执行您不完全理解的事情的那一刻起,您就失去了对模型的控制权。

【讨论】:

  • +1 阿门!对于任何认真的开发人员来说,SQL 都是绝对必要的技能。 ORM 永远无法完全取代它。
  • 伟大的声明。 SQL 是业务应用程序所必需的技能,这并不好笑。另外,如果您需要编写复杂的报告,最好了解一些高级 SQL 技巧。
【解决方案2】:

在我看来,了解 SQL 比任何供应商特定的技术都更有价值。在某些情况下,那些不错的预打包框架将无法解决特定情况,并且需要高级 SQL 知识。

【讨论】:

    【解决方案3】:

    学习 SQL 查询/语法仍然很重要。原因是您至少需要了解 Linq to SQL 如何在幕后转换为数据库。

    这将在您发现问题时为您提供帮助,例如无法正确更新的问题。或者查询性能需要提高。

    同样需要了解什么是汇编语言以及它最终如何成为机器语言。不过总而言之,您不必成为专家,但至少能够写出来并理解它。

    【讨论】:

      【解决方案4】:

      了解 SQL 及其背后的范式(基于集合)仍然很重要,以便能够创建高效的 SQL 语句,即使您使用的是 LinqToSql 或任何其他 OR/M。

      在某些情况下,您会希望使用本机 SQL 编写查询,因为无法使用 LinqToSql/HQL/其他方式编写查询,或者 LinqToSql 无法为其生成高性能查询。

      在某些情况下,您会希望使用本机 sql 等在数据库上执行临时查询...

      【讨论】:

        【解决方案5】:

        我认为 LinqToSQL(或其他 Linq to SQL 提供程序)不应该妨碍您了解 SQL。

        当您的查询没有返回您所期望的结果,或者在生产数据库上运行需要 30 分钟时,您最好能够了解 LTS 生成了什么以及它失败的原因。

        我知道,这是一个重新讨论过的话题,它可能不适用于您所做的事情(“小型”数据库永远不会遇到这种问题等),但有时不要太忽视抽象层是值得的。

        另一个原因是,Linq 没有你在 SQL 中可以做的全部范围,所以你可能不得不求助于编写“原始”SQL,即使结果被物化为对象。

        【讨论】:

          【解决方案6】:

          这取决于你在做什么,从你所说的来看,专注于其他领域可能更有意义。

          话虽如此,我发现了解 SQL 允许以下操作:

          • 能够编写查询以轻松地从系统中提取数据。 用于临时查询或检查。
          • 能够编写复杂的存储过程,这使我可以将复杂的数据处理分组到数据库中应该在的一个位置。
          • 通过添加索引和了解 SQL/查询计划的 IT 过程来微调 LinqToSql 的能力。

          其中大部分对更复杂的系统更有帮助,因此,如果您不从事这些工作,则可能没有多大帮助。

          在您的情况下,列出可能有用的技术可能会有所帮助,然后确定它们的优先级。
          换句话说,为自己制定一个发展计划,这可能不仅包括学习技术知识,还包括更广泛的关注点,如设计模式、沟通技巧和其他领域。

          【讨论】:

            【解决方案7】:

            SQL 是一种工具。 Linq to SQL 也是一个工具。拥有更多工具是一件好事。在解决问题时,它会给你更多的视角。

            考虑一种情况,您可能希望在一次操作中对数据库执行多个查询或多次更新。如果您可以编写 TSQL,您可能会为自己节省大量往返数据库的时间。

            【讨论】:

              【解决方案8】:

              我会说你肯定需要深入了解你的 SQL,因为你需要知道你的 Linq 表达式生成什么代码,以及如果你想要高性能查询,这些代码会产生什么影响。当然,在大多数情况下您可能会完成工作,但有时在 Linq 语法中非常细微的差异会导致性能上的巨大差异。

              实际上我今天早上遇到了这个问题,我在哪里做了 .Any(d => d.Id == (...).First().Id) 而不是在哪里做 (...).Any( i => i.Id == d.Id)。这导致查询的执行速度慢了五倍。

              有时你需要分析实际的 Sql-query 才能意识到你犯的错误。

              【讨论】:

                【解决方案9】:

                学习像 Linq To SQL 这样的底层语言总是一个好主意。 SQL 非常标准化,它将帮助您了解编程的新范式。

                【讨论】:

                  【解决方案10】:
                  • 您可能并不总是在 .NET 中工作。
                  • 了解基本概念不会有什么坏处。
                  • 不再维护 LINQ to SQL 以支持实体框架

                  【讨论】:

                  【解决方案11】:

                  您迟早会遇到需要至少具备 SQL 应用知识才能解决的问题。而且迟早您会遇到在 DB 中最能实现的需求(无论是在 SP-s 中还是在触发器、视图或其他程序中)。

                  【讨论】:

                    【解决方案12】:

                    LINQ To SQL 仅适用于 .NET。如果您碰巧找到另一份不使用 .NET 的工作,那么您将不得不重新编写存储过程。

                    了解 SQL 还可以让您更好地了解服务器的运行方式,并可能使您成为更好的数据库设计师。

                    【讨论】:

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