实体框架和.NET4.0的LINQtoSQL之间有什么区别?

实体框架和.NET4.0的LINQtoSQL之间有什么区别?,.net,linq-to-sql,entity-framework,.net-4.0,.net,Linq To Sql,Entity Framework,.net 4.0,我正在检查并意识到EF将LINQ替换为SQL。从第一本书开始,我就熟悉LINQ到SQL,但我对EF一无所知。无论如何,在阅读代码时,除了名称之外,似乎什么都没有改变。相同的旧存储库类,相同的旧函数 我做了一点调查。我知道LINQ并不局限于SQL。此外,EF不限于Microsoft系列SQL Server。人们对EF不满意,说它太复杂了。但现在我在EF的名字下读同样的代码。仅使用ADO.NET实体模型而不是LINQ to SQL生成类。由于EF现在已经成为事实上的标准ORM,有人能澄清关于EF功能

我正在检查并意识到EF将LINQ替换为SQL。从第一本书开始,我就熟悉LINQ到SQL,但我对EF一无所知。无论如何,在阅读代码时,除了名称之外,似乎什么都没有改变。相同的旧存储库类,相同的旧函数


我做了一点调查。我知道LINQ并不局限于SQL。此外,EF不限于Microsoft系列SQL Server。人们对EF不满意,说它太复杂了。但现在我在EF的名字下读同样的代码。仅使用ADO.NET实体模型而不是LINQ to SQL生成类。由于EF现在已经成为事实上的标准ORM,有人能澄清关于EF功能的纷扰吗?

最新的EF更加健壮,并且您不会被迫进入设计师驱动的伪ORM体验(或者如果您试图在没有设计师的情况下进行配置,则会陷入配置的泥潭)。您的模型现在可以是POCO对象,而不是一些设计师驱动的局部类损坏的B,它们本质上与设计师驱动的代码结合在一起,您可以完全远离设计师,而不会感觉自己在上游游动,通常感觉他们听了社区的话,或者实际上试图模仿现有的,经过战斗测试的解决方案,而不是为“Morts”或任何L2Sql版本制作版本。

EF是在v4.0中诞生的。在那之前,使用它有点痛苦,我不推荐它。现在我建议所有新的LINQ到DB代码都使用EF4

就新特性而言,LINQ部分实际上与LINQtoSQL非常相似。但这是一个完全不同的体系结构:EF4充当(EF)ADO.NET提供程序的LINQ提供程序,然后封装另一个ADO.NET提供程序。所以有了一些新东西,比如实体SQL(我不使用),EF支持不同的底层ADO.NET提供程序(我使用)


EF使用的XML建模系统也允许。我经常使用的一种方法是将具有相同主键的不同表映射到实体继承关系;据我所知,在LINQ to SQL中实现这一点的唯一方法是通过“选择器列”(尽管我从未在LINQ to SQL中尝试过这一点)。

它们有些相似,可以以非常相似的方式使用,在代码方面,但它们有一些重要的区别。请注意,“LINQ”与“LINQtoSQL”不同;EF还使用LINQ。一些显著的区别是:

  • LINQtoSQL在很大程度上只是SQL Server,与其说是设计,不如说是实现。如果您有一个兼容的ADO.NET提供程序,EF旨在支持并且确实支持多个DBs
  • 开箱即用,LINQtoSQL在数据库元数据更改方面的情况非常糟糕。您必须从头开始重新生成模型的某些部分,并且会丢失自定义设置
  • EF支持多对多关系和继承等模型功能。LINQtoSQL不直接支持这些
  • 在.NET3.5中,LINQtoSQL比EF更好地支持特定于SQLServer的功能。这在.NET4中基本上是不正确的;他们在这方面相当相似
  • EF允许您选择模型优先、数据库优先或代码优先建模。LINQtoSQL,开箱即用,实际上只支持DB优先
LINQ到SQL和实体框架之间的区别: LINQ到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等)进行快速应用程序开发


LINQ to SQL允许您使用LINQ语法查询和修改SQL Server数据库。Entity framework是Microsoft提供的一个很棒的ORM,它允许您使用LINQ语法查询和修改RDBMS,如SQL Server、Oracle、DB2和MySQL等。如今,每个.NET应用程序都广泛使用EF来查询数据库


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

严格来说,EF支持“任何”ADO.NET提供程序并不是真的。。。提供者必须明确支持EF。例如,OLEDB、ODBC或Oracle提供程序并非如此。实际上,真正支持EF的提供商很少。@Thomas:than请澄清。我的印象是EF将与任何ADO.NET提供程序一起工作,并且提供程序只需在需要设计时支持时编写EF位。我猜我错了,因为每个DBMS都有自己的SQL方言,所以每个提供程序都需要实现