我正在检查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吗?
答案 0 :(得分:76)
它们有点相似,可以在代码方面以非常相似的方式使用,但它们有一些重要的区别。请注意,“LINQ”与“LINQ to SQL”不同; EF也使用LINQ。一些值得注意的差异是:
答案 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:
实体框架
它可以与各种数据库一起使用,如Oracle,DB2,MYSQL,SQL Server等。
最初生成.edmx文件。使用3个不同的文件.csdl,.msl和.ssdl
它支持复杂类型。
它可以从模型生成数据库。
它允许一对一,一对多和一对一实体类与关系表/视图之间的多对多映射
它允许您使用EntitySQL,ObjectContext,DbContext查询数据。
它提供了一种松散耦合的方法。由于它的代码第一种方法允许你使用依赖注入模式,这使它松散耦合。
它可以用于SQL Server,Oracle,DB2和MySQL等RDBMS的快速应用程序开发。
答案 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#中的查询语言,它是一组扩展语言,以便使其变得有用。