LINQ和Entity Framework有何不同?

6

我知道LINQ的好处并且知道如何在.Net应用程序中使用它。我感觉实体框架提供了与之相同的东西。

那么,LINQ和实体框架之间的主要区别是什么?

4个回答

12

LINQ 可以应用于任何数据源:内存中的对象、XML、SQL 等。

Entity Framework 可以使用 LINQ 对关系型数据库执行查询。

LINQ to SQL 是 Entity Framework 的前身,现已过时。


由于我正在使用EF作为企业解决方案,每天都会有越来越大的模型,因此我们在EF的第一次初始化(或预热)时遇到了性能问题。我阅读了这篇文章http://weblogs.asp.net/fbouma/fetch-performance-of-various-net-orm-data-access-frameworks,现在我在犹豫是否必须更改ORM?也许使用dapper(我知道它没有更改跟踪)或LLBLGenPro可以提供帮助!我们正在开发企业级解决方案,我希望了解您的想法。非常感谢。 - QMaster

7

比较 EF 和 LINQ 是不正确的。两者是不同的东西,它们通常一起工作以提供更好的开发体验(和生产力优势)。

LINQ 是一种查询语法/模型,可应用于任何数据源。EF 提供了这样一个数据源。


你能提供任何教程链接或文章链接,展示如何同时使用EF和LINQ吗? - Mrugesh
@Mrugesh,我相信MSDN上几乎每个EF代码示例都会展示与LINQ的使用,例如请参见:http://msdn.microsoft.com/en-us/data/jj205424,其中“query”部分是LINQ。我希望您不要将“LINQ”与“LINQ to SQL”混淆——后者是ORM库(类似于EF),用于SQL Server数据库(而EF则针对任何RDBMS)。 - VinayC

2
它们在代码方面有些相似,可以以非常类似的方式使用,但它们之间有一些重要的区别。请注意,“LINQ”并不等同于“LINQ to SQL”;EF也使用LINQ。一些值得注意的区别包括:
  • LINQ to SQL主要只支持SQL Server,这不是设计上的限制而是实现上的限制。如果您有兼容的ADO.NET提供程序,则EF被设计为支持多个DB。
  • 开箱即用,LINQ to SQL对于DB元数据更改的支持非常差。您必须从头开始重新生成模型的某些部分,并且会失去自定义。
  • EF支持像多对多关系和继承之类的模型特性。LINQ to SQL不直接支持这些。
  • 在.NET 3.5中,LINQ to SQL比EF更好地支持SQL-Server特定功能。在.NET 4中,它们在这方面基本上都很相似。
  • EF允许您选择Model First、DB First或Code First建模。开箱即用的LINQ to SQL真正只支持DB First。

来源:这里


1
我完全同意VinayC的观点。你无法真正进行比较。
使用Entity Framework,您将能够在程序中拥有整个数据库的表示。它将帮助您创建与数据库元素对应的类,这些类像在数据库中一样连接在一起。之后,您可以直接与这些类的元素交互,并像这样影响数据库。您将在Visual Studio中获得这些类图的某些表示。即使设置它需要一些努力,但与直接使用数据库元素相比,它通常更简单。
使用Linq是为了在数据源上执行查询。

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