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

Ufu*_*arı 58 .net entity-framework .net-4.0 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吗?

Cra*_*ntz 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允许您选择Model First,DB First或Code First建模.LINQ to SQL,开箱即用,实际上只支持DB First.


Ste*_*ary 17

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中尝试过这一点).

  • EF支持"任何"ADO.NET提供商并非严格要求......提供商必须明确支持EF.例如,OLE DB,ODBC或Oracle提供程序不是这种情况.实际上,很少有提供商*真的*支持EF. (2认同)

Ind*_*ons 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的快速应用程序开发.

更多细节