【问题标题】:Is LINQ to SQL Dead or Alive?LINQ to SQL 是死的还是活的?
【发布时间】:2010-09-20 03:24:51
【问题描述】:

就在我与 LINQ to SQL 交朋友时,似乎 MS 正在从它下面拉出地毯。

http://blogs.msdn.com/adonet/archive/2008/10/29/update-on-linq-to-sql-and-linq-to-entities-roadmap.aspx

根据我的一点点研究,EF 对于简单的工作来说太过分了。但是在此公告之后,继续使用 LINQ to SQL 是否有意义?

在 LINQ to SQL 的未来之外,这通常不会发出一个坏信号吗?考虑到 MS 将钻头扔到墙上的速度,尽早使用任何新钻头是否合理? (这很好,现在 LINQ to SQL 还为时过早!)。

对于我的 LINQ to SQL 工作,我想我要去 SubSonic!

更新:一些新意见:

http://ayende.com/Blog/archive/2008/10/31/microsoft-kills-linq-to-sql.aspx

http://codebetter.com/blogs/david.hayden/archive/2008/10/31/linq-to-sql-is-dead-read-between-the-lines.aspx

【问题讨论】:

  • 该公告中没有任何关于 LINQ 或 LINQ to SQL 消失的信息...?
  • @AugustLights 我认为公告所说的是“我们不会删除 LINQ to SQL,但我们将完全忽略它而不是 EF”
  • 乔恩——我就是这么读的。公告称,“......实体框架将是我们推荐的用于 LINQ 到关系场景的数据访问解决方案。”这意味着再见,LINQ to SQL。
  • MFC 并没有死,它只是不是首选的解决方案。你还在编写 MFC 代码吗? VB6 仍然受支持,你编码吗?一直都是这样,MS 做它想做的,而不是你想做的。
  • @rp:你在 DOA 下是什么意思 - Dead or AliveDead on arrival

标签: linq-to-sql


【解决方案1】:

1) 他们不能“杀死”Linq-to-SQL,因为它已经是 .net 框架的一部分。他们能做的就是停止为其添加功能。这并不能阻止成千上万已经在使用 L2S 的开发人员对其进行扩展和改进。一些核心区域很难触摸,但它们已经很稳固了,missing designer features can easily be bolted on

2) 其中一个PDC EF sessions 表明他们已经从 EFv1 惨败中吸取了一些教训,现在他们正在将 L2S 中的许多好东西复制并粘贴到 EF 中,并假装它是新的 EF 东西。换句话说,L2S 版本 2 刚刚被“重新标记”为 EF。

3) LINQ 本身(语言集成查询)是自切片冰淇淋以来最好的东西,它可以与 L2S 以外的许多其他东西一起使用(Linq 到对象,Linq 到实体,Linq 到 XML,Linq-到任何东西)。因此,DP 小组试图迫使 [大量] L2S 采用者转向 [不那么流行且目前存在缺陷的] Entity Framework 并不是不学习 Linq 的理由。

另请参阅此线程(我认为这部分触发了 Tim 的博客文章): http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=4061922&SiteID=1

更新 1:Roger Jennings 于 2008 年 12 月出版的 Visual Studio 杂志封面故事是一个很好的阅读主题,其中包含一些 L2S 与 EF 的比较:http://visualstudiomagazine.com/features/article.aspx?editorialsid=2583

更新 2:Redmond Developer News 引用 Anders Hejlsberg 的话说“LINQ to SQL 没有死。我可以向你保证,它没有死。什么都不会消失。我们从来没有这样做过,我们也永远不会这样做。

http://reddevnews.com/blogs/weblog.aspx?blog=3016

【讨论】:

  • StackOverflow 的创建者采用 Linq to SQL 作为他们选择的 ORM。显然,他们认为利大于弊。
  • 这仍然是真的吗?我听说 StackOverflow 从 L2S 移出,但似乎找不到此信息。
  • @Aaron,是的,他们使用手写 SQL 和他们自己的称为 Dapper 的微 ORM。他们可能仍会在网站上不太受欢迎的部分使用 LINQ-to-SQL。
【解决方案2】:

您的问题存在歧义,需要解决。

LINQ != LINQ to SQL

有一大堆 LINQ 技术和提供者:

  • Linq to SQL;
  • Linq 到实体;
  • Linq 到对象;
  • Linq 到 XML;

... 这些只是来自 Microsoft 的。也有非 MS 提供商,包括 NHibernate。

您链接的博客文章只讨论了 Linq to SQL。

LINQ 的主要优势在于您可以学习和使用一种查询语法,并在多种技术中重复使用它。

鉴于此,我建议任何认为“Linq To SQL”缺乏未来的想法都无关紧要,因为您在编写 LINQ 查询方面获得的技能将来可以转移到其他工具。

【讨论】:

  • LINQ 2 SQL 语法与实体框架非常相似,您可以轻松地在两者之间穿行。
  • 他的问题仍然有效,因为 LINQ to SQL 的实际实现对 SQL Server 有一些特定的优势。
【解决方案3】:

我们不会杀死 LINQ to SQL。我们正在针对 EF 进行优化,但 LINQ to SQL 绝对不会被淘汰:)

- 斯科特/微软。

【讨论】:

  • 大声笑。这让我很崩溃。您是否必须获得 Microsoft 的批准才能发表此公开声明? :p
  • 嗯? 2009 年,有问题的团队搞砸了,所以我不得不修复它……作为 .net 的产品经理:D
【解决方案4】:

您不仅应该学习 Linq(System.Linq.Enumerable 和 System.Linq.Queryable),还需要学习针对您的 .net 语言的编程语言增强功能。

在 C# 3.0 中,这些包括:

  • 扩展方法(第一个参数带有 this 关键字的静态方法)
  • 编译器推断类型 (var)
  • Lambda 语法(根据上下文生成匿名方法或表达式)
  • 初始化器
  • 属性默认实现(简写)

阅读更多here


在 VB 9.0 中,有一些内联 XML 魔法,还有很多其他的东西(很多类似于上面的 C# 列表)。

阅读更多here

【讨论】:

  • 哇,我一定过得很充实。只有对问题的句子进行非常严格的断章取义的解释——我的回答才有意义。
  • @David B,是的。我当时想,这是一个不错的答案,我只是不明白它是如何回答这个问题的。大声笑
  • 它不断获得支持。我想有些人只需要查看链接中的信息...如果您喜欢这个答案,您可能会喜欢我的更好答案:stackoverflow.com/questions/471502/what-is-linq/471592#471592
【解决方案5】:

老实说,我不明白你在那篇文章的哪个地方读到 link2sql 已经死了。

在您链接到它的博客文章中说:

我们正在听取客户关于 LINQ to SQL 的意见,并将继续根据我们从社区收到的反馈改进产品。

对我来说,这看起来像是 LINQ to SQL 将在未来得到开发和支持。我想知道你为什么认为它已经死了?

【讨论】:

    【解决方案6】:

    当然,我认为在 LINQ to SQL、LINQ to Entities 和 LINQ to [插入第 3 方 ORM] 之间进行选择提供了一个非常健康的数据访问层方法生态系统,软件开发人员可以从中进行选择。 NHibernate、LLBLGen 甚至 Subsonic 等第三方提供商(不确定他们是否会提供 LINQ 提供商)肯定会让竞争变得更好、更有趣。

    话虽如此,微软放弃 LINQ to SQL 将是完全可悲的,特别是因为它确实有很多追随者——甚至 StackOverflow 都是基于它构建的。

    【讨论】:

      【解决方案7】:

      Interesting blog post about it.以及Stackoverflow posts的一些相关信息。

      基本要点似乎是在 ado.net blog 上创建的 cmets,它指出 Entity Framework 是 Visual Studio 2010 和 Dot Net 4 的主要开发人员时间唯一的事情。

      我的回答是——呃。我们都知道这一点。微软在 PDC 2007 上公开表示,LINQ to SQL 是 SQL Server 的短期版本,因为 SQL Server 没有其他 LINQ 故事。它仅适用于 SQL Server。您不能编写 LINQ to SQL 提供程序 - 它没有模型。这是一种一次性技术,不可扩展。

      实体框架是 Microsoft 构建 LINQ 提供程序的唯一方法。实体框架被证明是相当有争议的,但我认为这部分是因为 LINQ to SQL 今天有更好的程序员体验。 Entity Framework 将赶上并超越 LINQ to SQL,因为它是 Microsoft 未来的 ORM/Mapping 工具。

      编辑 - 我刚刚在 my blog 上对此进行了更详细的描述

      EDIT2 - IQueryable 提供程序 - 与 LINQ to SQL 提供程序不同。您可以为您喜欢的任何内容编写自己的 IQueryable 提供程序。您不会获得设计师支持或模型生成。据我所知,没有用于绑定 LINQ to SQL 模型生成的 gui 设计器模型。

      【讨论】:

      • Re.:“您无法编写 LINQ to SQL 提供程序 - 它没有模型。”嗯,有。只是他们决定在最后一刻将必要的成员私有化,以使 EF 占优势。见blogs.msdn.com/mattwar/archive/2007/05/31/…
      • 对不起,上一个链接应该是blogs.msdn.com/mattwar/archive/2008/05/04/…
      • 谢谢 - 没有读过那篇文章。我确实知道内部有一个 API,但不知道是否曾经公开过。
      • 同一个博客 (blogs.msdn.com/mattwar) 也有一个完整的文章系列(带有示例)关于如何编写提供程序,一个可插入的、可下载的 L2S 提供程序,您可能会发现它很有用.
      • 是否可以破解它并不重要 - 它不受 MS 官方支持。您没有 VSIP 集成。您无法为您的应用获取徽标...
      【解决方案8】:

      我想我并没有真正看到这里的问题。从您链接的文章中:

      我们正在倾听客户的意见 关于 LINQ to SQL 并将 继续发展基于产品的 根据我们收到的反馈 社区也是如此。

      我错过了什么吗?是什么让 LINQ to SQL 在到达时就死机了?

      【讨论】:

        【解决方案9】:

        Scott Guthrie 告诉我他们不会杀死 LINQ to SQL:

        Post at LINQDev.com

        【讨论】:

          【解决方案10】:

          有人记得VB6吗?无论您个人厌恶还是喜欢它,微软都卖出了数百万份,企业花费数百万美元编写了数百万行 VB6。接下来发生了什么?

          • 好吧,Microsoft 仍然是 support VB6(有点 - 不是 IDE)。
          • 还有 Microsoft still say,他们甚至现在也在倾听 VB6 客户的意见 (in September 09)。
          • 但是 VB6 客户满意吗? Not since 2002,VB6 发布 4 年后。
          • 为什么不呢?您的代码投资升级到替代技术 VB.Net 的升级路径是expensive

          所以只要考虑一下这个教训。对我来说,LinqToSQL 支持似乎很勉强。他们是 obliged 来支持它,因为它在当前的 .NET 框架中。但它会出现在 .NET 5、6、7 中吗?想想这对你有多重要(据我所知,这对你来说根本不重要)。

          【讨论】:

          • 对我来说最好的是带有 OracleConnection 和 SqlConnection 的纯 ado.net,因为这个提供程序和 System.Data.DataSet 永远不会消失。是表格数据的基础。个人我喜欢 EF,但专业的 DataSet 仍然是一个标准。
          【解决方案11】:

          也许您不应该费心学习 Linq to SQL,但他们仍然会保留 Entities Linq。

          【讨论】:

          • 当前的 EF 方法存在一些严重问题,尤其是强制基类。我希望 EFvNext 在某些地方看起来会大不相同。在那之前,我建议使用最简单的选项:L2S - 或 nHibernate ;-p
          • 一旦您对 LINQ 有所了解,我建议“学习”LINQ to SQL 非常简单。这只是将 LINQ to SQL 类项添加到您的项目并将几个表拖放到设计器上的情况。
          【解决方案12】:
          【解决方案13】:

          很明显,微软工具箱中的 2 个 ORM 是一对多的,但在我看来,由于所有错误的原因,选择了错误的框架。 C# 团队完成了 ADO.NET 团队应该在更短的时间内完成的工作,并且做得更好,这一事实让 ado.net 团队难以接受。并不是说我知道这两个框架的内部工作原理,但我认为将 linq2sql 的缺点升级到实体框架会快得多。

          似乎涉及太多政治,我认为这确实会损害 asp.net 的声誉,因为我不相信 Entity 框架会给我们带来与 Linq2sql 一样的用户友好体验。 ado.net 团队还可以从 asp.net mvc 团队学习一些沟通技巧,因为对问题的说明充其量是模糊的。

          了解 Scott Gu 和他的 MVC 团队的观点会很有趣,因为他们的大多数示例都使用 Linq2Sql。

          【讨论】:

            【解决方案14】:

            Linq 2 Sql 和实体框架存在大面积重叠总是有点奇怪。我认为 L2S 只出现在 .NET 3.5 版本中的唯一原因是,人们非常怀疑 EF 是否会出现。现在EF1出来了,不管是很粗糙的v1,都不需要L2S了。

            【讨论】:

              【解决方案15】:

              (不,StingyJack,LINQ to SQL 不使用实体框架)

              无论如何,我不会担心。 Tim 表示他们正在听取客户关于 LINQ to SQL 的意见。从我看到的对 L2S 的热情来看,客户(也就是我们)会说出他们的想法。

              而且,正如 KristoferA 指出的那样,他们实际上不能“杀死” L2S,只能冻结它。而 L2S,一旦完善,实际上并不需要太多进一步的开发。有了 L2S 提供程序,LINQ 的任何进步都应该在 L2S 中可用。所以选择仍然是我们的。

              【讨论】:

              • 好吧,他们可以通过不将它包含在应该是并行安装的 Dot Net 4 中来杀死它。这意味着如果不在同一台机器上安装 3.5SP1,dot net 4 应用程序将无法访问它 - 不知道这是否属实。
              • 有人记得VB6吗?微软仍然支持 VB6(有点)。他们仍然说他们现在正在倾听 VB6 客户的意见。但是我们快乐吗?不会。将我们的代码升级到替代技术 VB.Net 的升级路径非常昂贵。所以只要考虑一下这个教训:并考虑一下 LinqToSQL 是否会在 .NET 4、5、6 中......以及这对你来说有多重要。
              【解决方案16】:

              Windows Phone 7 的下一个版本,代号 Mango,包括一个 SQL Server Compact Edition,可通过 Linq to SQL http://jesseliberty.com/2011/05/10/coming-in-mangosql-server-ce/ 访问

              【讨论】:

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