LINQ或ADO.net实体框架-应该学哪一个?

12

需要澄清的一点是:我正在浏览Julia Lerman的Oreilly出版物,内容涉及Entity Framework,但我感到非常困惑。

我有Charlie Calvert的Essential LINQ,但是从我花费10分钟翻阅Lerman的书中,我发现LINQ是针对SQL Server的,使用DataContext等对象,似乎有些功能欠缺...

而Entity Framework则是未来的方向,但它有一个称为Entity SQL的东西,看起来与Transact-SQL非常相似。虽然我的眼睛可能有点生疏,但问题是:

由于Entity Framework是微软支持的主要技术,学习LINQ to SQL还有意义吗?

        var numberGroups =
            from n in numbers
            group n by n % 5 into g
            select new { Remainder = g.Key, Numbers = g };

我是否混淆了实体SQL和LINQ这两个不同的技术?实际上,实体SQL是否使用LINQ?

根据我收到的许多回复:

好的,各位,我是新手,所以这次我编辑了我的答案;-) 非常感谢您详尽、快捷和非常有帮助的回答。 问候 MereMortal


1
很多人可能不同意Entity Framework是未来的趋势:http://efvote.wufoo.com/forms/ado-net-entity-framework-vote-of-no-confidence/ :) - BobbyShaftoe
不幸的是,那封信完全与此无关。他们等到EF已经发货才写信,所以更多的是在抱怨他们被忽视了,而不是要求做出一些改变。它甚至不能算作一种美好的愿望。 - John Saunders
那么我通过LINQ to SQL学习的语法是否适用于LINQ to Entities(我知道实体需要大量设置和描述元数据的XML文件),但是要得到答案,在这两种情况下查询是否相同? - MereMortal
1
另外,如果您还不熟悉基本的ADO.NET,那么建议您尽快学习。所有的一切都可以归结为ADO.NET的实现。了解其背后发生的事情是明智的。这些背景知识在调试和故障排除时非常有用。例如,如果自动化数据处理无法检索到预期数据,则可以使用ADO.NET对象快速创建验证测试,以验证问题是在ADO和您的代码之间。当您在处理.NET 1遗留代码时,这也非常有用,因为您别无选择,只能使用ADO.NET。 - Mike Christian
欢迎回来!Linq 2 Sql在Windows Phone上焕发生机! - user604613
8个回答

25

LINQ != LINQ-to-SQL

LINQ不等于LINQ-to-SQL。

LINQ是一个概念,包括一些语言支持。有许多实现方式——其中之一是LINQ-to-SQL,还有ADO.NET数据服务、实体框架的LINQ-to-Entities、LINQ-to-Objects、LINQ-to-Amazon、DbLinq等。

LINQ是一个概念,包括一些语言支持。有许多实现方式——其中之一是LINQ-to-SQL,还有ADO.NET数据服务、实体框架的LINQ-to-Entities、LINQ-to-Objects、LINQ-to-Amazon、DbLinq等。

您仍然可以使用LINQ与实体框架;事实上,LINQ-to-Entities是首选,因为它提供了编译时静态检查。Entity SQL只是另一种机制(除了LINQ-to-Entities之外),用于查询实体数据模型。

ESQL有三个主要优点:

  • 在早期预览版中,当LINQ-to-Entities仍在建设中时,它是唯一的选择
  • 它可以在某些没有对象模型的情况下使用,例如报告服务
  • 在一些特定情况下,ESQL更加表达清晰

对于其他所有情况,LINQ应该是您使用实体框架的工具。

对于其他所有情况,LINQ应该是您使用实体框架的工具。


Marc,eSQL也适用于动态查询。当然,您可以通过表达式操作等方式完成相同的操作,但大多数人更喜欢操作字符串而不是表达式树。 - Alex James
Entity SQL 可以与那些不支持 LINQ 的编程语言一起使用,例如 Managed C++。 - Nilesh Gule

9

LINQ是一个泛指语言功能,它允许使用C#或VB.NET编写查询以访问某种数据存储。其中包括LINQ to SQL、LINQ to Entities、LINQ to Objects等。

LINQ to SQL紧密模拟物理数据库结构。它为数据库中的每个表生成一个类型。如果您的数据库更改,则需要修改您的LINQ to SQL代码。

LINQ to Entities更紧密地模拟概念数据库设计。它允许您映射到物理数据库,但例如,允许您创建一个Person实体,该实体包含来自Person和Contacts表格的数据。这使您的调用者可以从数据的意义而非实现方式来思考。

此外,微软已经表示,与LINQ to Entities相比,将限制对LINQ to SQL的未来开发。考虑到增加的灵活性和LINQ to SQL不会获得更多增强功能,我建议使用LINQ to Entities和Entity Framework。


4

正如其他人所说,你可能是指 Linq to SQL 与 Entity Framework 的比较。

两者都适用于 SQL Server,但只有 Entity Framework 可以使用其他数据库。此外,LINQ to SQL 已经被废弃了。因此,请选择 Entity Framework。


1

Linq是一种编程结构,允许您查询您的对象

我认为你在谈论的是Linq to Sql。

您始终可以使用Linq来查询EF对象...


1

慢慢来,别着急。

简短回答:Entity Framework

更详细的回答:

LINQ to SQL 和 Entity Framework 是数据访问技术。

根据微软的说法,Linq 是:

LINQ 是 .NET 框架的一组扩展,包括语言集成查询、集合和转换操作。它通过本地语言语法扩展了 C# 和 Visual Basic 的查询功能,并提供了类库以利用这些功能。

来源:http://msdn.microsoft.com/en-us/netframework/aa904594.aspx

LINQ to SQL 和 Entity Framework 都有 Linq 提供程序,允许在对它们进行查询时使用这种令人惊叹的语法。


0

我将于12月2日和3日参加蒙特利尔的微软TehcDays活动,他们表示,未来几年将不再支持LINQ to SQL,因此最好开始学习LinQ to Entity(Entity Framework)。


LINQ to SQL是一种短期解决方案。正如其名称所示,它仅与SQL Server配合使用。另一方面,EF支持多个数据库。您可以参考我之前撰写的一篇博客文章,比较这两种技术:http://nileshgule.blogspot.com/2010/09/entity-framework-part-2-comparison.html - Nilesh Gule

0

Entity Framework有LINQ to Entities,因此您可以针对EF执行完全相同的查询。我的答案将是更多地投资于EF,因为即将推出的EFv4似乎很有前途。


0
据我所知,EF还没有完全准备好,并且它不支持许多LINQ2SQL中今天轻松使用的LINQ语句。如果您可以为您的应用程序承诺使用SQL Server,我建议您今天学习LINQ2SQL。在使用LINQ时,您将拥有更多的查询功能。
我敢打赌,当EF准备好之后,对于您来说,转换会更加容易,因为查询语言应该是可转移的。
祝你好运。

EF4(将在.NET 4.0 / VS2010中发布)似乎纠正了当前EF的许多缺陷和不足之处,并且看起来非常有前途!http://blogs.msdn.com/adonet/archive/tags/Entity+Framework/default.aspx - marc_s
非常感谢你那个非常有帮助的回答,Linus。我已经开始自己得出了相同的结论。我认为EF非常复杂,而且从ADO.Net命令/连接等等中抽身去学习LINQ to SQL可能是一个不错且有用的第一步,此外,关于LINQ to SQL还有大量好的参考资料可供使用,而关于EF的写作并不是那么广泛。 - MereMortal

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