LINQ TO SQL和Entity Framework 的关系 你了解多少?

1. LINQ  TO SQL 和EF 特点:  LINQ TO SQL和Entity Framework都是一种包含LINQ功能的ORM 也就是所谓的关系对象的映射。其中包括的有DBFrist  Code Frist    ModeL  Frist   三种中方式 来进行和数据库之间的访问。只是形式不同而已本质没有什么区别。都是ORM  之间的转化。最终都是来进行访问底层的数据库的对象 和服务。

简单来说LINQ是为了满足不知道怎么操作数据库的程序员开发设计的,LinQ 可以让他们以一种面向数据对象的方式来思考,及持久化他们的数据。 当然最后来进行访问数据库的无论是Oracle SQL Server  MySQL   MongoDB   DB2  等等 都是最终生成 SQL 语句来进行访问数据库的 和传统的ADO.NET 直接来访问数据库没有什么直接的区别,只是,MicroSoft  将其 CRUD 的一些方法进行封装了而已,让开发使用起来更加的方便  开发的速度更加的快速 ,更加的专注于核心的业务的开发的开发 ,而不是在为这些简单的操作而耽搁太多的时间。可以让开发节省更多的开发的时间 去做更多的事情。

当然你使用SQL Server  中的SQL Profile  来进行 查看 其中生成的SQL , 那么问题来了 如果Oracle  MySQL  DB2   MongoDB   如何进行查看生成的SQL 语句 了。那么这个时候你需要进行 使用nuGet 来进行添加一个第三方的程序集。MiniProfiler.dll 来进行查看生成的生成的SQL 语句  当然关于如何使用 可以进行参考 (http://www.cnblogs.com/jiekzou/p/6374726.html) 博客上面具有介绍我就不一一的说了。其中 无论是LINQ TO SQL  还是 EF 最终的形式 都是通过DBContent  来进行访问数据库。

LINQ  TO  SQL 和Entity Framework 两者的本质的区别:

EF对数据库架构和我们查询的中实现更好的解耦。使用EF,我们查询的对象不再是完全对应数据库架构的C#类,而是更高层的抽象:Entity Data Model。这为我们提供了额外的灵活性其中在性能和简单性上面也会有所损失。 这个是必须的。 毕竟在解析中性能以及功能性都是有所损失的。

优点LINQ TO SQL,是一个轻量级的ORM框架,为Microsoft SQL Server数据库提供快速的应用程序开发,其优点是易于使用、简单、高性能。Entity Framework,为创建数据库架构和实体类之间的映射提供了更好的灵活性,它还通过提供程序支持除了SQL Server之外的第三方数据库。 例如其中的MySQL  Oracle  MongoDB  DB 2  等等 都是可以映射以及访问的。

EF  6.0 经过Microsoft 的改进性能相对于EF 4.0 确实提升了不少 其中对于CRUD 的访问。这意味着我们在系列文章中的LINQ  TO  DB 查询可以同时适用于EF 4.0 以下的版本和L2S。而且,这也使得LINQ TO SQL  成为我们学习使用LINQ查询数据库的理想技术, 因为保持着对象和关系之间的映射的性 那么 在使用变得的非常的简单 以及灵活性,并且我们学习到的查询原则和技术同样适用于EF。

说明:.NET 3.5下建议使用LINQ TO SQL ,该版本已经完全支持成熟的LINQ;使用EF则建议使用.NET 4.0+(VS2010)以上的版本,该版本有成熟完整的EF       

 

LINQ TO SQL   

Entity Framework 4.0+

复杂度

相对不复杂

相对比较复杂

模型

域模型(DOMAIN MODEL)

概念数据模型(Conceptual DATA MODEL)

数据库服务器

SQL Server

多种数据库产品

开发时间

快速应用开发

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

继承

困难

容易

文件类型

DBML文件

EDMX,CDSL,MSL,SSDL文件

复杂类型支持

不支持

支持

查询能力

通过DataContext

ESQL,对象服务, Entity Client

性能

第一次查询较慢(延迟加载)

第一次查询也较慢(延迟加载),但总体优与LINQ to SQL  对于复杂的数据类型结合比较好

完善

不再出新版本

还出新版本目前已经更新到EF 6.0+ 以上的版本

从模型生成数据库

支持

支持 DBFrist  ModelFrist Code Frist 

2.LINQ  TO  SQL 和Entity Framework 复杂度:

 LINQ  TO  SQL 支持特性比较少一些;但是相对于EntityFramework支持的特性比较多,所以稍微比较复杂一些但是 两者可以相互结合的使用。将其转化集合 还是非常好使用的。没必要将形式局限与  LINQ TO  SQL  还是其中的LAMBDA 表达式上卖弄

 LINQ TO SQL在数据表与类之间提供了一对一的映射 和一对多之间的关系等等 当然 你也可以进行对于将对象直接作为查询的条件进行 查询这样的效率是非常的高的。

 LINQ  TO SQL只支持Microsoft SQL Server 2000及之后的版本当然你选择的数据库版本高一些还是比较好的 毕竟高版本的数据库使用起来无论是性能还是操作起来都是非常的方便的,但即使是SQLServer2000也有很多限制。EntityFramework可以支持DB2, MonogoDB, Oracle, MySQL还有其他的数据库等等。

3.LINQ  TO  SQL 和Entity Framework开发时间:

LINQ TO  SQL很容易学,开发起来也很快,但是LINQ TO SQL有一些限制,在开发较复杂的应用时可能会产生问题。EntityFramework的能力更强,虽然学习及应用起来比较慢,但是对更多的特性的支持使得在开发较复杂的应用时可以使问题最小化。当然我建议一些初学者还是老老实实的 从ADO.NET 开始进行学起 ,毕竟 知道知其然然后知其所以然 这样对于你写的Linq TO  SQL  还是 EF 都是帮助非常的大的。

4.LINQ  TO  SQL 和Entity Framework继承:

 LINQ TO SQL支持TPH,而EntityFramework支持TPH和TPT,并且对TPC也部分支持。

5.LINQ  TO  SQL 和Entity Framework 文件类型:

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

6.LINQ  TO  SQL 和Entity Framework 复杂类型的变化:

比如说,我们遇到一些复杂的表格进行关联的时候。LINQ  TO  SQL不支持这种复杂类型,而EntityFramework支持。但是我们遇到这样的问题的时候可以通过将EF 结合到 LINQ TO  SQL  集合来进行查询 并进行 处理就可以了。

 

 1 //例如下面进行查询过和订单相互关联的数据集合2 3  var AccountList = (from u in StarList.Where(u => u.FUST_LEVEL == 3).ToList()4 5  join p in MyDataContexter.fa_brokerage_bill_table.Where(p => p.FBBT_TIME.Year == date.Year && p.FBBT_TIME.Month == date.Month && p.FBBT_STATE != 0).ToList() on u.FUST_ID equals p.FBBT_FUST_ID6 7 orderby p.FBBT_CREATETIME descending8 select new AccountInfo9 {
10 Flag = u.FUST_LEVEL,
11 UserImg = AliyunRoot+u.FUST_HEADIMAGE,
12 UserName = u.FUST_REALNAME != "" ?( u.FUST_REALNAME.Length > 3 ? u.FUST_NICKNAME.Substring(0, 3) + "..." : u.FUST_NICKNAME) : (u.FUST_NICKNAME.Length > 3 ? u.FUST_NICKNAME.Substring(0, 3) + "..." : u.FUST_NICKNAME),
13 Income = p.FBBT_BIGSTAR_MONEY.ToString("N2") ?? "0.00",
14 ShowIncome = p.FBBT_BIGSTAR_MONEY,
15 StarID = u.FUST_ID,
16 StarLevel = u.FUST_LEVEL,
17 JoinTime = u.FUST_JOINTIME.ToString("yyyy-MM-dd")
18 }).ToList();

 

7.LINQ  TO  SQL 和Entity Framework 查询的速度和能力:

LINQ TO SQL通过DataContext对数据库进行查询。EntityFramework通过ObjectContext通过LINQ TO  ENTITY 进行查询。Entity Framework还提供了EDMX SQL,它是一种类似SQL的查询语言,很适合在模型定义中定义查询。EntityFramework还包含了 ObjectQuery类,用于对象服务在运行时动态创建查询。最后EntityFramework还包含EntityClientProvider,它 用于对概念模型进行查询。

 

 1 // 查询销售记录2 var QWXery = (from s in XZUser.Where(e => e.FUST_LEVEL == 2)3 where s.FUST_LEVEL_ID == strUserID4 join a in MyDataContexter.fa_brokerage_sales_table on s.FUST_ID equals a.FBPT_FUST_ID5 group a by a.FBPT_FUST_ID into g6 select new7 {8 g.Key,9 ZCount = g.Count(),
10 ZMoney = g.Sum(p => p.FBPT_MONEY)
11 }).ToList();
12 // 查询订单记录
13 var QXXery = (from s in XZUser.Where(e => e.FUST_LEVEL == 3)
14 where s.FUST_RECOMMEND_ID == strUserID
15 join b in MyDataContexter.fa_brokerage_sales_table
16 on s.FUST_ID equals b.FBPT_BUY_FUST_ID
17 group b by b.FBPT_BUY_FUST_ID into g
18 select new
19 {
20 g.Key,
21 ZCount = g.Count(),
22 ZMoney = g.Sum(p => p.FBPT_MONEY)
23 }).ToList();
24 // 联合一下
25 var QuerList = (from z in (from s in QWXery select s).Union(
26 from a in QXXery select a)
27 select new OrderList
28 {
29 ID = z.Key,
30 GCount = z.ZCount,
31 HJMoney = z.ZMoney
32 }).ToList();
33 return QuerList;
34 }
35 else
36 {
37 // 查询星星就可以了
38 var QXXery = (from s in XZUser
39 where s.FUST_RECOMMEND_ID == strUserID
40 join b in MyDataContexter.fa_brokerage_sales_table
41 on s.FUST_ID equals b.FBPT_BUY_FUST_ID
42 group b by b.FBPT_BUY_FUST_ID into g
43 select new OrderList
44 {
45 ID = g.Key,
46 GCount = g.Count(),
47 HJMoney = g.Sum(p => p.FBPT_MONEY)
48 }).ToList();
49 
50 return QXXery;
51 }

8.LINQ  TO  SQL 和Entity Framework  性能:

LINQ  TO  SQL和Entity Framework 在第一次进行比较缓慢 这个由于进行访问 数据从而 在解析以及读取数据等等 速度并不让人满意,但是只有在进行请求 访问的时候速度就比较快了 因为LINQ TO SQL  和EF  都涉及到一个延迟加载的问题 第二次加载后由于读取的数据早已放入 缓存 中 速度还是让人满意的 所以开发以及用户200W 以内的数据的数据 就没有必要去考虑这些性能的问题, 毕竟EF 6.0对于EntityFramework 做了很大的优化性能要稍微优于LINQ TO  SQL。 还是非常值得使用的。  如果对于并发可以考虑采用事务或者LOCK 来进行处理这些问题。 如果真是数据量非常的大那么查询过的结构足够的复杂,那么 采用存储过程 来做倒是还不错的。LINQ TO SQL  存储过程  EF  存储过程 来做 。倒是挺好的。

9.LINQ  TO  SQL 和Entity Framework  优化的处理:

一直有人对于 EF 和   LINQ  TO  SQL  的性能的问题存在很大的质疑 当然 这个是必须的。对于我们写的 LINQ  语句 以及 LAMBDA  的时候需要注意 就是了 理清楚表之间的关系 以及各个对象之间的关系,做到优化的查询 等等。具体如果做 我抽时间在写关于如何优化LINQ   表达式以及 LAMBDA  表达式做法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/439176.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【LeetCode - 1235. hard】规划兼职工作

题干: 先来看简单版本: n个区间,求最大的不相交区间数 【51NOD—贪心算法专题】 D 做任务一 区间贪心最大不相交子区间数_荷叶田田_的博客-CSDN博客 如果限定这道题的报酬都是1,那么就转化成【最大不相交区间数】了。 那道题…

HTML 链接 强制打开“另存为...”弹出式文本链接打开HTML

现在的HTML5里有一个download属性&#xff0c;可以直接进行另存为&#xff0c;还可以自己重新命名文件。。。 <a href"file link" download"filename.ext" target"_blank">Click here to download</a> HTML <a> download 属性…

【转】 CPU、MCU、MPU、DSP的区别和介绍

CPU&#xff1a; 中央处理器&#xff08;CPU&#xff0c;Central Processing Unit&#xff09;是一块超大规模的集成电路&#xff0c;是一台计算机的运算核心&#xff08;Core&#xff09;和控制核心&#xff08; Control Unit&#xff09;。它的功能主要是解释计算机指令以及…

禁止word另存为,禁止图片另存为excel禁止另存为

在很多企事业单位&#xff0c;处于商业机密保护的需要&#xff0c;常常需要禁止一些文件格式的“另存为”功能&#xff0c;防止通过“另存为”将文件另行保存&#xff0c;据为己有的目的&#xff1b;尤其是在局域网中访问服务器共享文件的时候&#xff0c;常常需要禁止将共享文…

Office web app server2013详细的安装和部署

SharePoint 2013集成Office web apps server2013详细的安装和部署 安装前的需要理解的&#xff1a; 1、Office Web Apps 只能由使用基于声明的身份验证的 SharePoint 2013 Web 应用程序使用。Office Web Apps 呈现和编辑在使用经典模式身份验证的 SharePoint 2013 Web 应用程序…

借助office web apps实现在线预览和在线编辑

我所有的代码都是用go语言编写&#xff0c;你可以直接编译后使用&#xff0c;不用再有其他的操作。 最近项目实在太忙&#xff0c;这几天才有时间&#xff0c;这次是重头戏&#xff0c;要好好琢磨一下怎么写&#xff0c;才能更简洁的说清楚一切。 上一节&#xff0c;我们已经安…

【转】WOPI host消息体结构

wopi协议通过JSON格式传递参数&#xff1a; {"AllowExternalMarketplace":{"type":"bool","default":false,"optional":true},"BaseFileName":{"type":"string","optional":false}…

Dbml文件提取建表TSql-CodeSmith

在昨天一个大学师弟&#xff0c;他问我能不能将LinqToSql文件转化为创建表的TSql语句&#xff0c;他是刚开始学习.NET&#xff0c;所以在网上下些示例看&#xff0c;但苦于没有数据库。所以就有了这一篇博客&#xff0c;作为我的Code生成技术的CodeSimth的最后一篇示例。在下一…

(译)你应该知道的jQuery技巧

帮助提高你jQuery应用的简单小技巧。 回到顶部按钮图片预加载判断图片是否加载完自动修补破损图像Hover切换class类禁用输入停止正在加载的链接toggle fade/slide简单的手风琴使两个DIV同等高度在浏览器标签/新窗口打开外部链接根据文本获取元素可见变化的触发Ajax调用错误处理…

DNS的A、CNAME、MX、NS、TXT、SPF记录

前言 最近工作过程中需要设定邮件服务器&#xff0c;其中涉及到dns服务器的设定。 整理并且记录自己的理解。 种类 A、CNAME、MX、NS、TXT、SPF 下面挨个介绍一下。 A记录/AAAA记录 IPv4&#xff1a; 示例&#xff1a;ns1.exmaple.com. IN A 198.51.100.2解释&#xff1a…

【转】新思想、新技术、新架构——更好更快的开发现代ASP.NET应用程序(续1)

上周星期天开通了博客并发布了第一篇文章《新思想、新技术、新架构——更好更快的开发现代ASP.NET应用程序》&#xff0c;汇集了一些比较流行的技术和开源项目&#xff0c;也把自己的程序架构、部分代码风格、前端表现简单做了一些展示&#xff0c;引起了近100位朋友的评论。特…

CCNA-Cisco-Packet-Tracerchs(思科官网)安装教程以及使用

Cisco-Packet-Tracerchs 思科官网模拟器&#xff0c;各大高校与中职都在使用。 但是由于支持的命令不太多&#xff0c;适用于NA阶段以及入门阶段的人群使用。 以下是免费百度网盘链接&#xff1a; https://pan.baidu.com/s/136fsYRnAfzGoj0DsQFaYTg 提取码: qa4e 复制这段内容…

CCNA-VLAN讲解与交换机三种端口模式(Acess,Trunk,Hybrid)小白入门级

VLAN讲解与三种端口模式(Acess,Trunk,Hybrid) TAG:所有文章均为原创&#xff0c;可以转载但请声明&#xff0c;是在学校里面做的&#xff0c;使用不了EVE和ENSP&#xff0c;请各路大神嘴下留情&#xff0c;如文章内容有误导请及时联系博主----来自一个17岁的中专生。 1.什么是V…

【转】2015-新思想、新技术、新架构——更好更快的开发现代ASP.NET应用程序

在博客园学习很长时间了&#xff0c;今天终于自己也开通了博客&#xff0c;准备分享一些感悟和经验。首先感谢博客园园主提供了这么好的程序员学习交流平台&#xff0c;也非常感谢张善友、dax.net、netfocus、司徒正美 等技术大牛的无私分享&#xff0c;从他们身上学到了很多。…

工作篇-佛山三水恒大-2020.10.23

** 工作篇-佛山三水恒大-2020.10.23 **人生第一次工作啊啊啊啊啊 其实按道理来说&#xff0c;第一次应该会很很紧张吧&#xff0c;不过我倒没有。 也不知道是我不怕还是什么&#xff0c;一切进行的挺顺利的。 前言&#xff1a;讲真那句&#xff0c;第一次做的话&#xff0c;…

UWP 使用OneDrive云存储2.x api(一)【全网首发】

最近开发人脸识别UWP【微识别 / WeRecognition】用到了OneDrive开发&#xff0c;下面把来龙去脉讲一下。 下载地址 https://www.microsoft.com/store/productId/9PDSNS7X9ST9&#xff0c;商店火爆热销中。。。。。。 由于UWP是跨平台的&#xff0c;一套代码可以运行在所有Wind…

CCNA-第一篇-基础入门概念

** 基础入门概念 **前言 没有什么学习是简单的.任何东西,包括你打游戏(除非是弱智的单机游戏)搞IT,一个月熬熬夜 月薪过X-W的大有人在,早9晚5一个月3K,自己选择.所以看你怎么学,每个人都很忙的,时间都是挤出来的. 一.网络基本概念入门 网络设备调试最基本的概念网络环境设计设…

UWP 使用OneDrive云存储2.x api(二)【全网首发】

上一篇提到为了给用户打造一个完全无缝衔接的最佳体验&#xff0c;UWP开发者最好也要实现App设置和数据的跨平台 分析了数据漫游和OneDrive的优缺点&#xff0c;结合自己App实际需要&#xff0c;我选择了OneDrive。 毕竟数据漫游100KB不够用啊。。。 这一次给大家我千辛万苦找…

CCNA-第二篇-路由器交换机概述

CCNA-第二篇-路由器交换机概述 为什么交换机可以转发&#xff1f; 1.使用MAC地址表 2.MAC地址表怎么来的呢&#xff1f;交换机自动学习 问题来了&#xff1a;PC是如何知道对端的MAC地址的呢&#xff1f; 我们在通信的到时候&#xff0c;不可能问你MAC多少吧&#xff0c;一般都是…

sharepoint当流程流转到某个节点对文档进行水印操作

sharepoint在流程中给文档库中的word或者pdf添加水印。 断断续续的搞了很久。总的解决方案如下&#xff1a; 在流程中&#xff0c;当运行到某步的时候&#xff0c;通过自定义代码调用后台方法&#xff0c;进行相关操作。 针对word的水印操作&#xff1a; 这里就不多说了网上有很…