博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Entity Framework 与 LINQ to SQL
阅读量:6180 次
发布时间:2019-06-21

本文共 2020 字,大约阅读时间需要 6 分钟。

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

 

LINQ to SQL

Entity Framework

复杂度

相对不复杂

相对比较复杂

模型

域模型(Domain model)

概念数据模型(Conceptual data model)

数据库服务器

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支持两种类型的开发模式,数据库优先和编码优先。数据库优先开发,数据库已经存在,所以不需要由模型生成数据库。编码优先,你要先创建你的模型,然后由模型生成数据库。

转载地址:http://pfbda.baihongyu.com/

你可能感兴趣的文章
使用 flutter 实现一个底部导航栏
查看>>
日记14(npm)
查看>>
每天一道leetcode27-移除元素
查看>>
linux命令行总结 + 自动备份Python程序
查看>>
使用async实现异步控制
查看>>
手动触发ngOnChanges方案
查看>>
150年前,他对拿破仑做数据可视化
查看>>
Kafka走查
查看>>
Ribbon 框架简介及搭建
查看>>
Vue 模板编程实践 之 巧用过滤器
查看>>
Node.js 服务器
查看>>
小议JS原型链、继承
查看>>
对比几段代码,看看你是 Python 菜鸟还是老鸟
查看>>
在Ubuntu 16.04 / 17.10 / 18.04上安装Oracle Java JDK 11
查看>>
算法-无重复字符的最长子串
查看>>
直播、短视频平台如何选择合适的CDN?
查看>>
GO GC 垃圾回收机制
查看>>
高德地图上展示终端信息
查看>>
区块链学堂——公有链、私有链、联盟链、侧链、互联链
查看>>
恕我直言,你可能误解了微服务
查看>>