LINQ to SQL和Entity Framework对照
LINQ to SQL和Entity Framework都是一种包括LINQ功能的对象关系映射技术。他们之间的本质差别在于EF对数据库架构和我们查询的类型实行了更好的解耦。
使用EF,我们查询的对象不再是全然相应数据库架构的C#类。而是更高层的抽象:Entity Data Model。这为我们提供了额外的灵活性,可是在性能和简单性上面也会有所损失。
LINQ to SQL由C#团队开发并在.NET Framework 3.5中公布,而Entity Framework由ADO.NET团队开发并作为.NET Framework 3.5 Service Pack 1的一部分公布。
此后,LINQ to SQL由ADO.NET团队接手。其结果是:在.NET 4.0中,ADO.NET团队更加专注于EF的改进。相对来说。LINQ to SQL的改进要小得多。
LINQ to SQL和Entity Framework各有所长,LINQ to SQL是一个轻量级的ORM框架,旨在为Microsoft SQL Server数据库提供高速的应用程序开发,其长处是易于使用、简单、高性能。
而Entity Framework的长处在于:其为创建数据库架构和实体类之间的映射提供了更好的灵活性,它还通过提供程序支持除了SQL Server之外的第三方数据库。
EF 4.0一个很受欢迎的改进是它如今支持与LINQ to SQL差不多的查询功能。这意味着我们在系列文章中的LINQ-to-db查询能够同一时候适用于EF 4.0和L2S。
并且。这也使得L2S成为我们学习使用LINQ查询数据库的理想技术,由于其保持了对象关系方面的简单性,并且我们学习到的查询原则和技术相同适用于EF。
说明:.NET 3.5下建议使用LINQ,该版本号已经全然支持成熟的LINQ。使用EF则建议使用.NET 4.0(VS2010)以上的版本号。该版本号有成熟完整的EF
复杂度:支持越多的特性就会越复杂。LINQ to SQL所支持的特性比較少。所以也就相对不太复杂;而EntityFramework支持的特性比較多,所以相对照较复杂。
模型:LINQ to SQL在数据表与类之间提供了一对一的映射。假设你有Customers,Orders, 和Lineitems表,你就会有Customer,Order, 和Lineitem类来匹配每个表。EntityFramework能够使你有一个Customer类。而这个类能够匹配多个表。这就意味着公司名能够 在一个表中,可是地址是在还有一个表中,而电话号码又在还有一个表中,等等。
数据库server:LINQ to SQL仅仅支持Microsoft SQL Server 2000及之后的版本号,但即使是SQLServer2000也有非常多限制。
EntityFramework能够支持IBMDB2, Sybase SqlAnywhere, Oracle, SQLAzure。还有其它非常多。
开发时间:LINQ to SQL非常easy学。开发起来也非常快,可是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支持两种类型的开发模式。数据库优先和编码优先。数据库优先开发,数据库已经存在,所以不须要由模型生成数据库。编码优先,你要先创建你的模型,然后由模型生成数据库。
LINQ to SQL和Entity Framework对照的更多相关文章
- LINQ之路10:LINQ to SQL 和 Entity Framework(下)
在本篇中,我们将接着上一篇“LINQ to SQL 和 Entity Framework(上)”的内容,继续使用LINQ to SQL和Entity Framework来实践“解释查询”,学习这些技术 ...
- LINQ之路 9:LINQ to SQL 和 Entity Framework(上)
在上一篇中,我们从理论和概念上详细的了解了LINQ的第二种架构“解释查询”.在这接下来的二个篇章中,我们将使用LINQ to SQL和Entity Framework来实践“解释查询”,学习这些技术的 ...
- LINQ to SQL和Entity Framework对比与关联 (转载)
LINQ to SQL和Entity Framework对比与关联 LINQ to SQL和Entity Framework都是一种包含LINQ功能的对象关系映射技术.他们之间的本质区别在 ...
- LINQ TO SQL和Entity Framework 的关系 你了解多少?
1. LINQ TO SQL 和EF 特点: LINQ TO SQL和Entity Framework都是一种包含LINQ功能的ORM 也就是所谓的关系对象的映射.其中包括的有DBFrist ...
- 在Linq to sql 和 Entity framework 中使用lambda表达式实现left join
在Linq to sql 和 Entity framework 中使用lambda表达式实现left join 我们知道lambda表达式在Linq to sql 和 Entity framework ...
- LINQ to SQL和Entity Framework
LINQ to SQL和Entity Framework都是一种包含LINQ功能的对象关系映射技术. 那么为什么会有LINQ这个东西的出现呢. 简单来说LINQ是为了满足不知道怎么操作数据库的程序员开 ...
- Linq实战 之 Linq to Sql及Entity Framework操作详解
Linq实战 之 Linq to Sql及Entity Framework操作详解 一:linq to db的框架 1. linq to sql 2. linq to ado.net entity f ...
- LINQ to SQL和Entity Framework对比与关联
LINQ to SQL和Entity Framework都是一种包含LINQ功能的对象关系映射技术.他们之间的本质区别在于EF对数据库架构和我们查询的类型实行了更好的解耦.使用EF,我们查询的对象不再 ...
- 查询大数据表的效率对比:Linq to SQL、Entity Framework、企业库存储过程、ADO.Net
最近因为要开发大数据量网站,特作比较. Linq to SQL 查询 记录数:399997Linq to SQL 查询 Milliseconds:1910视图查询 记录数:399997视图查询 Mil ...
随机推荐
- sqlserver中几种典型的等待
为了准备今年的双11很久没有更新blog,在最近的几次sqlserver问题的排查中,总结了sqlserver几种典型的等待类型,类似于oracle中的等待事件,如果看到这样的等待类型时候能够迅速定位 ...
- Ubuntu12.04 Git 服务器详细配置
Git是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目,学过Linux的都知道,Git的优点我就不再多说了,我也是很喜欢Linux的.今天我们一起学习Git服务器在Ubunt ...
- Zabbix使用外部邮箱服务器发送邮件报警
本来是想自己写一篇文章的,但是看到发现网上有写的不错的,于是乎又抄别人的文章,作为记录. 使用外部邮箱来发生邮件明显好处就是防止其他邮箱服务器当垃圾邮件处理,另一方面能降低收邮件延迟. 下面开始进行使 ...
- PHP学习笔记三十一【const】
<?php //常量都是public类型 // const 常量名=赋值 .变量名不需要加$符号,也不需要要访问修饰符,默认就是public class A{ const TAX_RATE=0. ...
- iOS开发 XML解析和下拉刷新,上拉加载更多
iOS开发 XML解析和下拉刷新,上拉加载更多 1.XML格式 <?xml version="1.0" encoding="utf-8" ?> 表示 ...
- js 日期天数相加减,格式化yyyy-MM-dd
参数格式: date :2016-03-02 days:-3(2)当为负数的时候日期往前推,为正数,日期往后推 function addDate(date, days) { var d = new D ...
- float的理解
1.浮动包裹性——浮动具有让元素按displya:inline-block显示(如果没有设置宽度和高度,则它可以显示的尽量窄高 度尽量小).2.浮动破坏性——浮动元素漂浮在标准流之上(但没有脱离文档流 ...
- css 背景图片拉伸[转]
http://www.jeasyuicn.com/css-background-image-stretching.html background-image:url(bg.png); -moz-bac ...
- PHP API反射实例
*反射是操纵面向对象范型中元模型的API,其功能十分强大,可帮助我们构建复杂,可扩展的应用.其用途如:自动加载插件,自动生成文档,甚至可用来扩充PHP语言.php反射api由若干类组成,可帮助我们用来 ...
- pubwin会员合并
此博文已移至爬不稳独立博客:www.pubwin2009.net连接:http://www.pubwin2009.net/index.php/post/15.html 我们说下过程(这里,我们要求两个 ...