.NET 4.0实体框架和LINQ to SQL之间有什么区别?

时间:2010-07-20 20:16:42

标签: .net linq-to-sql entity-framework .net-4.0

我正在检查2nd edition of Professional ASP.NET MVC,并意识到EF取代了LINQ to SQL。我从第一本书中熟悉LINQ to SQL,但我对EF一无所知。无论如何,在阅读代码时,似乎没有任何改变,除了名称。相同的旧存储库类,相同的旧函数。

我做了一点研究。我知道LINQ不仅限于SQL。 EF也不限于Microsoft系列SQL服务器。 In this 2 year old question人们对EF不满意,说它太复杂了。但现在我在EF名下读相同的代码。只有使用LINQ to SQL的ADO.NET实体模型生成类。任何人都可以清除关于EF功能的大惊小怪,因为它现在是事实上的标准ORM吗?

5 个答案:

答案 0 :(得分:76)

它们有点相似,可以在代码方面以非常相似的方式使用,但它们有一些重要的区别。请注意,“LINQ”与“LINQ to SQL”不同; EF也使用LINQ。一些值得注意的差异是:

  • LINQ to SQL主要是SQL Server,而不是设计和实现。如果您有兼容的ADO.NET提供程序,则EF旨在支持并支持多个DB。
  • 开箱即用,LINQ to SQL的数据库元数据更改故事非常糟糕。您必须从头开始重新生成模型的某些部分,否则会丢失自定义项。
  • EF支持多对多关系和继承等模型功能。 LINQ to SQL不直接支持这些。
  • 在.NET 3.5中,LINQ to SQL比EF更好地支持特定于SQL Server的功能。这在.NET 4中大多不适用;他们在这方面非常相似。
  • EF允许您选择“模型优先”,“数据库优先”或“代码优先”建模。 LINQ to SQL,开箱即用,实际上只支持DB First。

答案 1 :(得分:17)

EF随着v4.0而成熟。在此之前,使用它有点痛苦,我不推荐它。现在我的建议是所有新的LINQ-to- DB 代码都使用EF4。

就新功能而言,LINQ部分实际上与LINQ to SQL非常相似。但它是一个完全不同的架构:EF4充当(EF)ADO.NET提供程序的LINQ提供程序,然后包装另一个ADO.NET提供程序。所以有新的东西,比如Entity SQL(我不使用),EF支持不同的底层ADO.NET提供程序(我使用它)。

EF使用的XML建模系统也允许more powerful mapping abstractions。我经常使用的是具有映射到实体继承关系的相同主键的不同表;根据我的理解,在LINQ to SQL中执行此操作的唯一方法是通过“选择器列”(尽管我从未在LINQ to SQL中尝试过这种方法)。

答案 2 :(得分:13)

LINQ to SQL与实体框架之间的区别:

LINQ to SQL:

  • 它仅适用于SQL Server数据库。
  • 生成.dbml以维持关系
  • 它不支持复杂类型。
  • 无法从模型生成数据库。
  • 它只允许实体类和关系表/视图之间的一对一映射。
  • 它允许您使用DataContext查询数据。
  • 它提供了一种紧密耦合的方法。
  • 它只能用于SQL Server的快速应用程序开发。

实体框架

  • 它可以与各种数据库一起使用,如Oracle,DB2,MYSQL,SQL Server等。

  • 最初生成.edmx文件。使用3个不同的文件.csdl,.msl和.ssdl

  • 维护关系
  • 它支持复杂类型。

  • 它可以从模型生成数据库。

  • 它允许一对一,一对多和一对一实体类与关系表/视图之间的多对多映射

  • 它允许您使用EntitySQL,ObjectContext,DbContext查询数据。

  • 它提供了一种松散耦合的方法。由于它的代码第一种方法允许你使用依赖注入模式,这使它松散耦合。

  • 它可以用于SQL Server,Oracle,DB2和MySQL等RDBMS的快速应用程序开发。

More details

答案 3 :(得分:4)

最新的EF更加强大,并且您不会被迫进入设计师驱动的伪ORM体验(如果您在没有设计人员的情况下尝试这样做,那么就会陷入配置的困境)。你的模型现在可以是POCO对象,而不是一些设计师驱动的部分类错误的bs,这些bs内在地与设计师驱动的代码相结合,你可以完全摆脱设计师,而不会觉得你在上游游泳,一般来说它只是感觉他们有听取了社区的意见,或者实际上试图模仿现有的,经过实战考验的解决方案,而不是为“Morts”或L2Sql应该制作的版本。

答案 4 :(得分:0)

LINQ to SQL授予您使用LINQ语法查询和修改SQL Server数据库的权限。实体框架是Microsoft提供的一个很棒的ORM,它允许您使用LINQ语法查询和修改RDBMS,例如SQL Server,Oracle,DB2和MySQL等。如今,EF被每个.NET应用程序广泛用于查询数据库。

换句话说,LINQ用于将C#代码连接到许多不同类型的内存中对象。实体框架是一个对象关系映射(ORM)框架,用于将C#代码连接到外部数据库(通常是SQL Server)。 LINQ是一种嵌入到C#中的查询语言,它是一组扩展语言,以便使其变得有用。