[转]Entity Framework vs. LINQ to SQL

Entity Framework和LINQ to SQL到底有什么区别?这是一个很常见的问题。下面的表中简要罗列了两种技术的主要区别。web

 

 

LINQ to SQL数据库

Entity Framework服务器

复杂度app

相对不复杂ide

相对比较复杂性能

模型学习

域模型(Domain model)编码

概念数据模型(Conceptual data model)spa

数据库服务器设计

SQL Server

多种数据库产品

开发时间

快速应用开发

须要较长时间,但支持更多特性

继承

困难

容易

文件类型

DBML文件

EDMX,CDSL,MSL,SSDL文件

复杂类型支持

不支持

支持

查询能力

经过DataContext

ESQL,对象服务, Entity Client

性能

第一次查询较慢

第一次查询也较慢,但整体优与LINQ to SQL

完善

再也不出新版本

还出新版本

从模型生成数据库

支持

不支持

 

复杂度:支持越多的特性就会越复杂。LINQ to SQL所支持的特性比较少,因此也就相对不太复杂;而EntityFramework支持的特性比较多,因此相对比较复杂。

模型:LINQ to SQL在数据表与类之间提供了一对一的映射。若是你有Customers,Orders, 和Lineitems表,你就会有Customer,Order, 和Lineitem类来匹配每个表。EntityFramework可使你有一个Customer类,而这个类能够匹配多个表。这就意味着公司名能够在一个表中,可是地址是在另外一个表中,而电话号码又在另外一个表中,等等。

数据库服务器:LINQ to SQL只支持Microsoft SQL Server 2000及以后的版本,但即便是SQLServer2000也有不少限制。EntityFramework能够支持IBMDB2, Sybase SqlAnywhere, Oracle, SQLAzure,还有其余不少。

开发时间:LINQ to SQL很容易学,开发起来也很快,可是LINQ to SQL有一些限制,在开发较复杂的应用时可能会产生问题。EntityFramework的能力更强,虽然学习及应用起来比较慢,可是对更多的特性的支持使得在开发较复杂的应用时可使问题最小化。

继承:LINQ to SQL支持TPH,而EntityFramework支持TPH和TPT,而且对TPC也部分支持。

文件类型:LINQ to SQL使用包含XML的数据库标记语言(DBML)文件来映射entity与数据表。EntityFramework 使用四个文件。第一个是Entity Data Model (EDMX),这个是在设计器中使用的。在编译时EDMX文件产生了其余三个文件。另外三个文件中,第一个是ConceptualSchema Definition Language(CSDL)文件,其包含概念模型的XML定义。第二个是SchemaDefinition Language(SSDL)文件,其包含存储模型的定义。第三个文件是Mapping Specification Language(MSL)文件,其包含概念模型与存储模型之间的映射。

复杂类型支持:好比说,一个客户有电话号码,但你想要电话号码定义为国家区号,地区号,城市区号,号码和分机号。LINQto SQL不支持这种复杂类型,而EntityFramework支持。

查询能力:LINQ to SQL经过DataContext对数据库进行查询。EntityFramework经过ObjectContext经过LINQto Entities进行查询。Entity Framework还提供了ESQL,它是一种相似SQL的查询语言,很适合在模型定义中定义查询。EntityFramework还包含了ObjectQuery类,用于对象服务在运行时动态建立查询。最后EntityFramework还包含EntityClientProvider,它用于对概念模型进行查询。

性能:LINQ to SQL和Entity Framework第一次执行查询的时候都比较慢,但以后性能都让人比较满意。EntityFramework性能要稍微优于LINQto SQL。

完善:微软在发布了Entity Framework以后就中止了发布新的LINQ to SQL,但因为LINQto SQL的简单性,它仍是很受欢迎的,因此微软仍将继续对LINQto SQL的用户进行支持与反馈,可是LINQto SQL将再也不发布新版本进行完善。

由模型生成数据库:LINQ to SQL没有能力由模型生成数据库。Entity Framework支持两种类型的开发模式,数据库优先和编码优先。数据库优先开发,数据库已经存在,因此不须要由模型生成数据库。编码优先,你要先建立你的模型,而后由模型生成数据库。

 

原文出自《Access Data with Microsoft .NET Framework 4》