LINQ to SQL是死的还是活着?

96

就在我和LINQ to SQL交朋友的时候,微软似乎要打破这个平衡了。

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的未来之外,这是否只是发出了一个不好的信号?考虑到微软正在快速地推出新技术,是否明智早期使用任何新技术呢?(这还算客气,对于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


5
我认为这条公告表明:“我们不会删除 LINQ to SQL,但是我们将完全忽略它并使用 EF。” - Jon Limjap
Jon - 我的理解也是这样。公告中说:“...实体框架将成为我们推荐的用于LINQ到关系型场景的数据访问解决方案。” 这意味着再见,LINQ到SQL。 - rp.
4
MFC并没有死亡,只是不再是首选解决方案。你还在编写MFC吗?VB6仍受支持,你还编写它吗?微软一直都这样做,他们做自己想做的,而不是你想要的。 - gbjbaanb
1
@rp:你说的DOA是指“Dead or Alive”还是“Dead on arrival”? - abatishchev
更新文档可能是针对.NET 3.5的。它已经死了,Jim,它已经死了。 - rp.
显示剩余5条评论
16个回答

65
1) 他们不能“杀死”Linq-to-SQL,因为它已经是.NET框架的一部分。他们能做的就是停止为其添加功能。这并不妨碍那些已经在使用L2S并对其进行扩展和改进的成千上万的开发人员。一些核心领域可能比较棘手,但它们已经很稳定了,缺失的设计师功能可以轻松附加
2) PDC EF会话之一表明,他们从EFv1灾难中学到了一些教训,现在将L2S中的许多好东西复制粘贴到EF中,并假装这是新的EF内容。换句话说,L2S第二版刚刚被“重新标记”为EF。
3) LINQ(语言集成查询)本身是自切片冰淇淋以来最好的东西,它可以与许多其他东西一起使用,而不仅仅是L2S(Linq to objects、Linq to entities、Linq to XML、Linq-to-anything)。因此,DP小组试图强制[大量]L2S采用者转向[不太受欢迎且目前存在缺陷的]Entity Framework并不是不学习Linq的理由。
此外,请参阅此线程(这是我认为部分触发了Tim的博客文章): http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=4061922&SiteID=1

更新1:罗杰·詹宁斯(Roger Jennings)在《Visual Studio Magazine》2008年12月号的封面故事中对此进行了很好的阐述,并进行了一些L2S与EF的比较,值得一读:http://visualstudiomagazine.com/features/article.aspx?editorialsid=2583

更新2:安德斯·海尔斯伯格(Anders Hejlsberg)在Redmond Developer News上说:“LINQ to SQL并没有死。我向你保证,它没有死。没有什么东西会永远消失。我们从来没有这样做过,也永远不会这样做。”

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


14
StackOverflow的创始人选择采用Linq to SQL作为他们首选的ORM。显然,他们认为其优点超过了风险。 - Robert Harvey
这还是真的吗?我听说StackOverflow已经不再使用L2S了,但似乎找不到这方面的信息。 - Aaron
2
@Aaron,是的,他们使用手写SQL和自己的微型ORM Dapper。在网站不太受欢迎的部分,他们可能仍然使用LINQ-to-SQL。 - CMircea

28

你的问题存在一些歧义,需要解决。

LINQ != LINQ to SQL

有许多LINQ技术和提供程序:

  • Linq to SQL;
  • Linq to Entities;
  • Linq to Objects;
  • Linq to XML;

这些只是来自Microsoft的其中几个。 还有非微软提供商,包括NHibernate。

你链接的博客文章仅谈到Linq to SQL。

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

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


LINQ 2 SQL 的语法与 Entity Framework 相似,因此您可以轻松地在两者之间切换。 - Jason Short
他的问题仍然有效,因为LINQ to SQL的实际实现具有一些针对SQL Server的特定优势。 - Tor Haugen

21

我们并未淘汰 LINQ to SQL。我们正在优化 EF,但是可以确定的是 LINQ to SQL 并不会被淘汰 :)

- Scott / 微软。


哈哈,这让我笑了。你需要得到微软的批准才能公开发表这个声明吗? :p - Kellen Stuart
嗯?在2009年,那个团队搞砸了一条消息,所以我不得不去修复它……作为.NET的产品经理 :D - Scott

13

除了需要学习 Linq (System.Linq.Enumerable 和 System.Linq.Queryable) 外,您还需要学习 .Net 语言的编程语言增强功能。

在 C# 3.0 中包括以下内容:

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

更多信息请点击此处阅读。


在 VB 9.0 中有一些内联 XML 魔法,以及许多其他功能(许多与上述 C# 列表相似)。

更多信息请点击此处阅读。


哇,我一定是当天太过字面了。只有在非常严格的上下文解释下,我的回答才有意义吗? - Amy B
@David B,是的...我觉得这个回答还可以,只是我不明白它如何回答这个问题。哈哈 - mmcdole
1
它一直在得到赞。我猜有些人只是需要看到链接中的信息...如果你喜欢这个答案,你可能会喜欢我在这里提供的更好的答案:https://dev59.com/RXRB5IYBdhLWcg3w6LV2#471592 - Amy B

8

我真的不理解你在那篇文章中读到了Link2SQL已死的信息。

在你链接的博客文章中,它说:

我们正在倾听客户对于LINQ to SQL的意见,并将根据社区反馈继续改进这个产品。

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


7

毫无疑问,我认为在LINQ to SQL、LINQ to Entities和LINQ to [插入第三方ORM]之间进行选择,提供了一种完全健康的数据访问层方法生态系统,软件开发人员可以自由选择。像NHibernate、LLBLGen甚至Subsonic这样的第三方提供者(不确定他们是否将提供LINQ提供程序)肯定会使竞争更加激烈和有趣。

尽管如此,如果Microsoft放弃LINQ to SQL,将是非常遗憾的,特别是因为它确实拥有良好的追随者——甚至StackOverflow也是建立在其基础上的。


6

有关此事的有趣博客文章。 以及Stackoverflow帖子上的一些相关信息。

基本意思是在ado.net博客上发表的评论表明,实体框架是Visual Studio 2010和Dot Net 4中唯一得到主要开发人员时间的东西。

我的回应是 - 当然。我们都知道这一点。微软在PDC 2007公开表示,LINQ to SQL是SQL Server的短期发布,因为没有其他与SQL Server相关的LINQ故事。它只适用于SQL Server。您无法编写LINQ to SQL提供程序-没有模型可用。它是一种一次性技术,不可扩展。

Entity Framework是微软提供的唯一构建LINQ Provider的方式。Entity Framework已经成为一个相当有争议的话题,但我认为这部分原因是因为LINQ to SQL在今天具有更好的程序员体验。Entity Framework将会赶超并超过LINQ to SQL,因为它是未来微软的ORM/映射工具。
编辑 - 我刚刚在我的博客上写了一个稍微详细的介绍。
编辑2 - IQueryable Provider - 不是与LINQ to SQL提供程序相同的东西。您可以为任何您喜欢的内容编写自己的IQueryable Provider。您将不会获得设计器支持或模型生成。据我所知,没有GUI设计器模型可用于连接到LINQ to SQL模型生成。

1
回复:“您无法编写LINQ to SQL提供程序 - 没有模型可用。”实际上是有的。只是他们在最后一刻决定把必要的成员设为私有,以便给EF带来优势。请参见http://blogs.msdn.com/mattwar/archive/2007/05/31/the-origin-of-linq-to-sql.aspx - KristoferA
1
抱歉,之前的链接应该是http://blogs.msdn.com/mattwar/archive/2008/05/04/mocks-nix-an-extensible-linq-to-sql-datacontext.aspx - KristoferA
谢谢 - 我还没有看过那篇帖子。我知道内部有一个API,但不知道是否已经公开发布了。 - Jason Short
1
同一个博客(http://blogs.msdn.com/mattwar/)还有一整套的文章系列(带示例),介绍如何编写提供程序,_并且_ 还有一个可插拔的可下载的 L2S 提供程序,你可能会觉得有用。 - KristoferA
不管你能否破解它 - 它并没有得到微软的官方支持。你无法进行VSIP集成。你也无法为你的应用程序获得标志... - Jason Short
阅读完博客后,他谈论的是编写一个IQueryable提供程序。那不是与Linq to SQL相同的东西。 - Jason Short

5
我想我并没有看出问题所在。从您提供的文章中可以得知:
“我们正在倾听客户对LINQ to SQL的反馈,并将根据社区的反馈不断发展这个产品。”
我是否漏掉了什么?是什么给人们留下了LINQ to SQL已经死亡的印象?

4

还记得VB6吗?无论你个人是痛恨它还是喜爱它,微软卖出了数百万份副本,企业花费了数百万美元编写了数百万行VB6代码。接下来发生了什么?

因此,请考虑这个教训。对我来说,LinqToSQL 支持似乎是勉强的。他们 必须 支持它,因为它在当前的 .NET 框架中。但是它会出现在 .NET 5、6、7… 中吗?只需考虑一下这对您有多大影响(我不知道这是否完全不重要)。


对我来说,最好的选择是使用OracleConnection和SqlConnection的纯ADO.NET,因为这些提供程序和System.Data.DataSet永远不会过时。它是表格数据的基础。个人而言,我喜欢EF,但专业的DataSet仍然是一种标准。 - pedrofernandes

4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接