LINQ to SQL有哪些优点?

alc*_*cal 20 linq ado.net stored-procedures linq-to-sql

我刚开始在一个中型项目上使用LINQ to SQL,并希望增加我对L2S提供的优势的理解.

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

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

Ben*_*tBe 41

L2S的优势:

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

关于表现:

  • 在大多数解决方案中,性能最有可能不会成为问题.预优化是一种反模式.如果您稍后看到应用程序的某些区域变慢,您可以分析这些部分,在某些情况下甚至可以使用存储过程或ADO.NET交换一些linq查询.
  • 在许多情况下,延迟加载功能可以加快性能,或者至少简化代码.

关于调试:

  • 在我看来,对Linq2Sql进行调试比存储过程和ADO.NET都要容易得多.我建议您查看Linq2Sql Debug Visualizer,它可以让您查看查询,甚至触发执行以在调试时查看结果.
  • 您还可以配置上下文以将所有sql查询写入控制台窗口,此处提供更多信息

关于另一层:

  • Linq2Sql可以看作是另一层,但它是一个纯粹的数据访问层.存储过程也是另一层代码,我已经看到很多情况,其中部分业务逻辑已经实现到存储过程中.在我看来,情况要糟糕得多,因为您将业务层拆分为两个位置,开发人员更难以清楚地了解业务领域.


Jon*_*eet 14

只是一些快速的想法.

LINQ一般

  • 使用相同的语法和运算符查询内存中集合和进程外数据存储
  • 声明式样式非常适用于查询 - 在很多情况下,读取和写入都更容易
  • 整洁的语言集成允许编写新的提供程序(进程内外),并利用相同的查询表达式语法

LINQ to SQL(或其他数据库LINQ)

  • 在需要它们而不是存储过程的地方编写查询可以使开发更快:只需要很少的步骤来获取所需的数据
  • 错字字符串(存储过程,参数名称或仅仅是普通的SQL)涉及的字母可能会引起刺激; 这个硬币的另一面是你得到Intellisense的查询
  • 除非你打算使用ADO.NET中的"原始"数据,否则无论如何你都会在某个地方拥有一个对象模型.为什么不让LINQ to SQL为您处理它?我更喜欢能够只是做一个查询并找回对象,随时可以使用.
  • 我希望性能很好 - 如果不是,你可以自己调整它或者直接回到SQL.使用ORM当然不会消除创建正确索引等的需要,并且通常应该检查为非平凡查询生成的SQL.

它无论如何都不是灵丹妙药,但我非常喜欢它直接进行SQL查询或使用存储过程.