代码之家  ›  专栏  ›  技术社区  ›  Nick Allen

如果使用LINQtoSQL,还有什么好的理由学习SQL查询/语法吗?

  •  3
  • Nick Allen  · 技术社区  · 17 年前

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

    由于我一直在使用ASP.NET MVC和LinqToSql,似乎有太多繁重的工作是为我完成的,并封装在SQL端,因此我怀疑继续充实我的SQL查询知识是否有任何好处,或者我是否最好将“学习时间”集中在其他事情上。

    你的想法?

    12 回复  |  直到 17 年前
        1
  •  13
  •   Adam Robinson    17 年前

    您应该完全了解SQL,并使您的知识保持最新。ORM被设计用来减轻做一些你知道如何做的单调乏味的事情的痛苦,就像一个图形计算器被设计用来做一些你可以手工做的事情(并且应该知道如何做)。

    当你开始让你的ORM在数据库中做你不完全理解的事情的那一刻,就是你对你的模型失去控制的那一刻。

        2
  •  5
  •   Jason Miesionczek    17 年前

        3
  •  1
  •   David Basarab    17 年前

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

    这将在您发现问题时对您有所帮助,例如某些内容更新不正确。或者需要提高查询性能。

    同样,您需要了解汇编语言是什么,以及它最终如何成为机器语言。然而,总的来说,你不必是一个专家,但至少能够用它来写作和理解它。

        4
  •  1
  •   Frederik Gheysels    17 年前

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

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

        5
  •  1
  •   Denis Troller    17 年前

    我认为LinqToSQL(或其他LinqToSQL提供者)不应该阻止您了解SQL。

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

    另一个原因是,Linq并没有提供SQL所能提供的全部功能,因此您可能不得不使用编写“原始”SQL,即使结果被具体化为对象。

        6
  •  1
  •   Bravax    17 年前

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

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

    其中大多数对更复杂的系统更有帮助,因此,如果您不在这些系统上工作,可能就没有那么大的帮助。

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

        7
  •  1
  •   Linus    17 年前

    SQL是一种工具。LINQtoSQL也是一种工具。带上更多的工具是一件好事。在解决问题时,它将为您提供更多的视角。

    考虑一个场景,您可能希望在一个操作中对DB进行多个查询或多个更新。如果您可以编写TSQL,那么就有可能为自己节省大量到数据库的往返。

        8
  •  1
  •   Runeborg    17 年前

    事实上,今天早上我遇到了这个问题,在这里我做了.Any(d=>d.Id==(…).First().Id),而没有做where(…).Any(I=>I.Id==d.Id)。这导致查询执行速度慢了五倍。

    有时,您需要分析实际的Sql查询,以了解您所犯的错误。

        9
  •  0
  •   Daniel A. White    17 年前

    学习linqtosql之类的底层语言总是一个好主意。SQL是相当标准化的,它将帮助您理解编程中的新范例。

        10
  •  0
  •   Chris Doggett    17 年前
    • 了解基本概念并没有坏处。
    • 为了支持实体框架,不再维护LINQ到SQL
        11
  •  0
  •   juhan_h    17 年前

    您迟早会遇到一些问题,这些问题至少需要SQL的实用知识来解决。迟早,您会遇到在数据库中实现得最好的需求(无论是在SP-s中,还是在触发器、视图或其他方面)。

        12
  •  0
  •   Scott Lance    17 年前