LINQ到SQL的优点是什么?

LINQ到SQL的优点是什么?,linq,linq-to-sql,stored-procedures,ado.net,Linq,Linq To Sql,Stored Procedures,Ado.net,我刚刚开始在一个中型项目中使用LINQtoSQL,我想进一步了解L2S的优势 我看到的一个缺点是它添加了另一层代码,我的理解是它的性能比使用存储过程和ADO.Net慢。调试似乎也是一个挑战,尤其是对于更复杂的查询,而且这些查询最终可能会被移动到存储过程中 我一直想要一种在更好的开发环境中编写查询的方法,L2S查询是我一直在寻找的解决方案吗?或者我们刚刚在SQL上创建了另一个层,现在需要担心的问题是原来的两倍?我必须说,它们正是您一直在寻找的。习惯需要一些时间,但一旦习惯了,你就想不起回去了(至少

我刚刚开始在一个中型项目中使用LINQtoSQL,我想进一步了解L2S的优势

我看到的一个缺点是它添加了另一层代码,我的理解是它的性能比使用存储过程和ADO.Net慢。调试似乎也是一个挑战,尤其是对于更复杂的查询,而且这些查询最终可能会被移动到存储过程中


我一直想要一种在更好的开发环境中编写查询的方法,L2S查询是我一直在寻找的解决方案吗?或者我们刚刚在SQL上创建了另一个层,现在需要担心的问题是原来的两倍?

我必须说,它们正是您一直在寻找的。习惯需要一些时间,但一旦习惯了,你就想不起回去了(至少对我来说是这样)。 关于linq和存储过程,如果构建错误,则两者的性能都可能很差。我转移到linq,用sql查询客户机的一些存储过程,这些存储过程的编码非常糟糕,因此时间从20秒(对于web应用程序来说完全不可接受)下降到<1秒。与存储过程解决方案相比,代码要少得多


更新1:您还可以获得很大的灵活性,因为您可以限制所获取内容的列,而实际上它只会检索这些列。在存储过程解决方案中,您必须为获得的每个列集定义一个过程,即使底层查询是相同的。

我们最近通过Entity Framework环境切换到LINQ2Entity。以前,我们有基本的SQLadapters。由于我们正在使用的数据库相当小,我无法对LINQ的性能发表评论


不过我必须承认,编写查询变得容易多了,而且添加实体确实可以实现强大的键入功能。

只是一些简单的想法

LINQ一般情况下

  • 使用相同的语法和运算符查询内存内集合和进程外数据存储
  • 声明式样式对于查询非常有效——在很多情况下读写都比较容易
  • 整洁的语言集成允许编写新的提供者(进程内和进程外),并利用相同的查询表达式语法
LINQ到SQL(或其他数据库LINQ)

  • 在需要的地方编写查询,而不是作为存储过程编写查询,可以大大加快开发速度:只需获取所需数据所涉及的步骤要少得多
  • 输入错误可能会令人恼火的字符串(存储的进程、参数名或纯SQL)要少得多;这枚硬币的另一面是,您可以通过查询获得Intellisense
  • 除非您要使用ADO.NET中的“原始”数据,否则无论如何,您将在某个地方拥有一个对象模型。为什么不让linqtosql为您处理呢?我更喜欢只做一个查询,然后取回对象,准备好使用
  • 我希望性能会很好——如果性能不好,您可以自己调整,也可以退回到纯SQL。使用ORM当然不会消除创建正确索引等的需要,您通常应该检查为非平凡查询生成的SQL

无论如何,它都不是万灵药,但我更喜欢它直接进行SQL查询或使用存储过程。

L2S提供的优势:

  • 没有像SQL查询中那样的神奇字符串
  • 智能感知
  • 数据库更改时编译检查
  • 更快的发展
  • 工作单元模式(上下文)
  • 自动生成的可用于小型项目的域对象
  • 延迟加载
  • 学习编写linq查询/lambdas是.NET开发人员的必修课
关于性能:

  • 在大多数解决方案中,性能很可能不会成为问题。预优化是一种反模式。如果您后来发现应用程序的某些部分速度较慢,您可以分析这些部分,在某些情况下甚至可以使用存储过程或ADO.NET交换一些linq查询
  • 在许多情况下,延迟加载特性可以提高性能,或者至少可以大大简化代码
关于调试:

  • 在我看来,调试Linq2Sql比存储过程和ADO.NET都要容易得多。我建议您看看,它使您能够查看查询,甚至在调试时触发一个execute来查看结果
  • 您还可以配置上下文以将所有sql查询写入控制台窗口,详细信息
关于另一层:

  • Linq2Sql可以看作是另一层,但它是一个纯粹的数据访问层。存储过程也是另一层代码,我见过许多情况,其中一部分业务逻辑已实现到存储过程中。在我看来,这要糟糕得多,因为您将业务层分为两个位置,开发人员将更难清楚地了解业务领域
作为更新,这里有一些关于LINQ到SQL未来的链接:


正如最后一个链接中的评论所说,LINQ到SQL不会消失,只是不会“改进”,至少微软不会。您可以随意使用这些评论和帖子,只是在您的开发计划中要谨慎。

Johannes,我不认为强类型是linq2entity与linq2sql的论据,因为它还具有强类型:)。。。不过,我相信也有一些好的,我仅限于比较linq2sql和ado.netBoth John&Bengt几乎说了同样的话,都非常详细!也许最好在DB SP中实现业务逻辑(以便利用DB功能进行安全性和性能分析),并且只使用LINQ在填充对象时减少编码