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》