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

.net .net-4.0 entity-framework linq-to-sql

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

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

一般承认的答案

它们有点相似,并且可以以非常类似的方式使用,代码方面,但它们有一些重要的区别。请注意,“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允许您选择Model First,DB First或Code First建模。 LINQ to SQL,开箱即用,实际上只支持DB First。

热门答案

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

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

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



许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因