[转]Entity Framework vs. LINQ to SQL
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支持两种类型的开发模式,数据库优先和编码优先。数据库优先开发,数据库已经存在,所以不需要由模型生成数据库。编码优先,你要先创建你的模型,然后由模型生成数据库。
原文出自《Access Data with Microsoft .NET Framework 4》
[转]Entity Framework vs. LINQ to SQL的更多相关文章
- Entity Framework 与 LINQ to SQL
Entity Framework和LINQ to SQL到底有什么区别?这是一个很常见的问题.下面的表中简要罗列了两种技术的主要区别. LINQ to SQL Entity Framework 复杂度 ...
- Entity Framework Code First执行SQL语句、视图及存储过程
1.Entity Framework Code First查询视图 Entity Framework Code First目前还没有特别针对View操作的方法,但对于可更新的视图,可以采用与Table ...
- 将 Entity Framework、LINQ 和 Model-First 用于 Oracle 数据库
目的 本教程介绍如何使用 Entity Framework.语言集成查询 (LINQ),以及如何对 Oracle 数据库使用 Model-First 以生成数据定义语言 (DDL) 脚本. 所需时间 ...
- Entity Framework Code First for SQL Compact
这篇博客将介绍EF Code First中如何使用SQL Compact.SQL Compact是微软推出的免费的关系型数据库,目前最新版本是SQL Compact 4.0.微软的开发工具VS 201 ...
- 使用Entity Framework 自动产生的Sql语句
对于一个单独实体的通常操作有3种:添加新的实体.修改实体以及删除实体. 1.添加新的实体 Entity Framework Code First添加新的实体通过调用DbSet.Add()方法来实现. ...
- Entity framework中LINQ的使用
一.linq和ef的差别 我们做项目时,难免会遇到用的不知道是啥,及把linq和EF搞混了.今天我带领大家梳理下思路,首先说linq查询,然后介绍EF查询 1.linq查询 当我们使用linq查询时, ...
- 如何得到EF(ADO.NET Entity Framework)查询生成的SQL? ToTraceString Database.Log
ADO.NET Entity Framework ToTraceString //输出单条查询 DbContext.Database.Log //这里有详细的日志
- Entity Framework查询,EF执行SQl
一.简介 EF 支持开放底层的 ADO.NET 框架,DbContext有三种常用方法 DbSet.SqlQuery //查询并返回Entities DbContext.Database.SqlQue ...
- C# Entity Framework并发处理
原网站:C# Entity Framework并发处理 在软件开发过程中,并发控制是确保及时纠正由并发操作导致的错误的一种机制.从 ADO.NET 到 LINQ to SQL 再到如今的 ADO.NE ...
随机推荐
- 第十七章:android解析JSON
一.解析JSON数据: 首先引入包import org.json.JSONObject;(android sdk 14以后应该自带了 ) Android端的程序解析JSON和JSON数组: packa ...
- [翻译]-马丁·福勒-page对象
译者注:这篇文章翻译自马丁·福勒(Martin Flower,对,没错,就是软件教父)官网的一篇文章,原文出处在文底.如果你正在做WEB自动化测试,那么我强烈推荐你看这篇文章.另外透露Martin F ...
- JS 数字转换为大写金额
function DX(n) { if (!/^(0|[1-9]\d*)(\.\d+)?$/.test(n)) return "数据非法"; var unit = "千百 ...
- MySQL分区表
当数据库数据量涨到一定数量时,性能就成为我们不能不关注的问题,如何优化呢? 常用的方式不外乎那么几种: 1.分表,即把一个很大的表达数据分到几个表中,这样每个表数据都不多. 优点:提高并发量,减小锁的 ...
- Python之线程池
版本一: #!/usr/bin/env python # -*- coding:utf-8 -*- import Queue import threading class ThreadPool(obj ...
- Leetcode 1 Two Sum STL
题意:给定一个目标值target,找到两个数的和为target,返回这两个数的下标 用map记录每个数的下标,并用于查找 class Solution { public: vector<int& ...
- Liferay7 BPM门户开发之32: 实现自定义认证登陆(定制Authentication Hook)
第一步:修改liferay-hook.xml <?xml version="1.0"?> <!DOCTYPE hook PUBLIC "-//Lifer ...
- hdu 1864 01背包 最大报销额
http://acm.hdu.edu.cn/showproblem.php?pid=1864 New~ 欢迎“热爱编程”的高考少年——报考杭州电子科技大学计算机学院关于2015年杭电ACM暑期集训队的 ...
- Couldn't create temporary file to work with
Ubuntu中当你编译安装软件的时候可能会出现Couldn't create temporary file to work with,原因可能是: 1.权限问题 2.根目录下没有tmp文件夹 解决办 ...
- NXP LPC 状态可配置的定时器(SCT)
状态可配置的定时器(SCT) 前言正在申请专利的状态可配置的定时器(SCT),是一个复杂的,但易于配置的定时器,它提供前所未有的灵活性,使工程师们在未来证明他们的设计,并减少进入市场的时间.在其最简单 ...