LINQ to Entities统一数据存取方法解析(非原创)

使用idea中Database快速获取数据库中的数据,并导入我们的实体类entity中。 使用idea中Database快速获取数据库中的数据,并导入我们的实体类entity中。 操作如下: 阅读详情
 

LINQ统一数据存取方法解析

 

微软面向对象数据存取机制──LINQ,是今年初.NET Framework 3.5中推出的存取技术,新版本更新主要是针对ADO.NET Entity Framework,而推出LINQ to Entities。

LINQ设计的目的是希望解决开发者需要熟悉多种数据存取模式的麻烦。由于开发者需要处理的数据方式越来越复杂,而且混合使用的趋势日益明显。例如应用程序需要存取文件,而文件的Metadata常常是以XML格式描述,再加上应用系统需要以数据库记载人员与权限相关信息。

就这个例子看来,开发者所面对的数据方式,除了结构化的关系型数据,还包括半结构的XML及非结构化的文件和影音文件。

而用以操作这些数据方式的类别对象各有不同:数据库用ADO或ADO.NET;XML用XML DOM(Document Object Model);存取文件用IO。除此之外,查询语法也不一样:存取SQL Server资料用T-SQL;存取XML,用Xpath;存取文件,用类别的属性。因此开发者编写程序时,往往需要熟悉多种数据存取模式。

事实上,无论是关系型数据、XML或文件,有一个共通特征──都是对象集合。

LINQ的出发点,是提供操作对象集合统一的模式,未来只要是集合的对象,都可以利用LINQ统一操作。也就是说,开发者只要熟悉一种语法,就可以操作各种集合对象,背后由.NET Framework根据集合对象的种类,自动产生对应的语法。

这么做的好处,除了.NET Framework可以用多运行绪处理集合,通常会比较有效率之外,也可保有一致性,无论存取XML、数据库、DataSet或文件,所使用的LINQ查询语法是统一的,因此开发者不需要了解什么是XML DOM、T-SQL、DataSet的Method和Property,转而交由LINQ产生对应的语法。

不过目前LINQ存取数据库有一个关键的限制,是现阶段微软只推出LINQ to SQL,而它是针对SQL Server的Provider,而其它数据库的支持,仍待协力厂商开发对应的LINQ Provider。

LINQ结合Entity Framework,可强化本机查询

.NET Framework 3.5 SP1新增的LINQ to Entities,是为了配合ADO.NET Entity Framework,提供存取Entities的能力。

因为ADO.NET Entity Framework必须依赖数据库的查询能力,所以当开发者运行实体查询语言(Entity Query Language),自数据库得到一堆对象暂存于本机内存之后,可以运用LINQ To Entities把数据库回传的结果,作更进一步的新增、删除、修改及查询。

例如ADO.NET Entity Framework取得100笔员工数据实体,若要再找出性别为女的数据,逐笔搜索是比较辛苦的方式,藉助LINQ to Entities就可以直接下条件,筛选出符合的数据。

如何使用ORM

 

 

由上面的描述可以得知,LINQ着重的方向,是以统一的方法存取镑类数据方式;而ADO.NET Entity Framework是微软为了结合数据库存取与新式面向对象模型,所推出的ORM解决方案。

不过,针对两者交集的数据库存取部分,适合使用LINQ to SQL或者ADO.NET Entity Framework的时机到底为何?

事实上,LINQ并没有很细致的对应能力,因为它并不是专门用来解决关系型数据库与对象对应的方案,所以针对关系型数据库,它只能做到一对一的对应。

一般看来,由于LINQ to SQL针对对象与数据表的对应,只能做到一对一关系,所以如果要处理一对多或多对多的对应,就只能选择ADO.NET Entity Framework。

负责教授SQL Server的资深讲师胡百敬说:“如果开发者不想面对面向对象化的数据实体,希望了解数据库的结构,则可以选择LINQ to SQL。”

在数据库中的数据表不多的情况下,开发者是可以清楚掌握数据库结构的。但如果是一套ERP,有成千上万个数据表的话,开发者可能会只希望看数据实体,而忽略数据库真正的设计架构,就适合ADO.NET Entity Framework。

但是,未必是越抽象就越好,数据库与面向对象的关联,会衍生出复杂的对应与继承关系,所以企业必须要具备懂得面向对象数据设计的人才,负责处理对象与数据表的对应,开发者才可能只专心在处理商业逻辑的部分。

T-SQL仍是DBA与开发者必学的基础

 

 

自从LINQ及ADO.NET Entity Framework问世以来,初学者最常提出的问题就是──到底要学SQL语法?还是LINQ to SQL?还是ADO.NET Entity Framework?

其实.NET开发者确实可以只学LINQ而不管SQL,把所有数据存取的行为通通改用LINQ处理。但是数据库程序开发又有人是负责编写预存程序(Stored Procedure),他们还是必须要学习SQL语法。

严格讲起来,如果有好的ORM解决方案,数据库开发者确实可以不用学SQL。过去的数据库存取确实是很复杂的工作,不过开发者已经习惯了。

虽然T-SQL一点也不面向对象,但是结构化查询语法很接近人类自然语言,非常地简单、易学也易懂,所以开发者不用懂C#、VB.NET等程序语言,光看SQL语法,也猜得出来处理的工作类型。尤其是数据库管理者,如果在SQL Server服务器端,没能善用T-SQL的话,根本无法有效存取。

至于有没有必要跟随微软技术发展的脚步,学习LINQ和ADO.NET Entity Framework?要回归到开发团队在思考数据存取时,是不是使用面向对象的方式。无论LINQ或ADO.NET Entity Framework,都提供能与面向对象模型结合的查询能力。

习惯用对象思考、希望面向对象观念与关系型数据库平顺整合的人,可以尝试学习新的查询语言。如果不是,其实T-SQL也够用的,开发者还是可以用老方法编写数据库存取的应用。

 

基于dify平台批量分析excel格式信息 如何以表格形式批量输入一些信息,然后让大模型以对话应用形式逐条进行推理分析?请逐行分析以下数据,给出推理结果:{{input}}这里提供一个分步解决方案,结合。 阅读详情

相关推荐

Open3D 基于法向量夹角的特征点提取

基于法向量夹角的特征点提取是一种在点云处理中用于识别表面变化显著区域的技术。通过计算点云中每个点的法向量与其邻域点法向量之间的夹角,可以判断点云表面的局部变化程度,并提取那些法向量变化较大的点作为特征点。这种方法特别适用于提取边缘、角点等关键几何特征。

纵马踏花向自由 1534

Linq新增数据方法

作者:坚定的守猴 撰写日期:2019年4月9日 开发软件和关键技术:VS;Linq新增 在编程当中,新增数据方法有很多,而Linq新增是其中之一,下面我们来看一下Linq它新增的方法是怎么实现对数据进行新增的效果的。 在新增数据之前,我们要清楚新增的大致流程。我们就简单的分为三步:第一步判断需要新增的数据与以前存在数据库的作比较;第二步成功新增需要的数据;第三步保存新增的数据。这样我们就有一个大...

weixin_44541267的博客 2073

ADIsimFrequencyPlanner_v2_1_1

ADIsimFrequency 2.1.1 安装包 ADI频率合成设计软件 WIN10亲测可用

LINQ to SQL 查询数据库和使用存储过程

如下列出查询表达式,常用操作符,与SQL语句对应。  where  关键字的使用public void MyWhere() { NorthwindDataContext dc = new NorthwindDataContext(); //查询产品名称以L开头的记录 var query =

Jason's Word 968

推荐开源项目:MongoDB.Entities - 简化MongoDB数据库操作的新选择

数据存储和访问的世界中,MongoDB是一个强大的文档型数据库,以其灵活性和高性能而受到开发者们的欢迎。然而,尽管官方驱动提供了丰富的功能,但直接使用可能会导致代码复杂性增加。这就是`MongoDB.Entities`项目闪亮登场的地方。它是一个轻量级的.NET Standard库,目标是通过抽象官方驱动,同时添加实用功能,为MongoDB操作提供一种简洁优雅的API接口。 ## 2、项目技术

gitblog_00002的博客 579

Linq删除数据方法

作者:坚定的守猴 撰写日期:2019年4月30日 开发软件和关键技术:VS;Linq删除数据 Linq在处理数据时,它有四种处理的方式,就是增删查改。一般处理数据的过程中,前面有了查询、新增和修改的方法给删除作了一定基础上的铺垫,到了删除方法这一步就会变得相对简单了。同属于一种Linq名下的数据处理方式,删除实现的方式和前面也就变化不了多少的。 现在我们就见识一下这删除的方法,感受一下它独特的魅力...

weixin_44541267的博客 3455

Linq查询数据库修改后的数据数据还是保存的数据信息

创建了.net core webapi项目,通过EF保存数据数据保存后外部修改了数据库的内容,但是项目中查询的仍然是保存时的数据。 解决的方法是:在查询的语句中添加AsNoTracking()后就可以查询到修改后的数据了。 例如 EFContext.table.AsNoTracking().where(i=>i.id==id); ...

feixiang_01171的专栏 1018

c#使用linq移除列表中的重复项

来自:http://outofmemory.cn/code-snippet/1888/c-usage-linq-yichu-list-de-repeat-item 假定我有如下列表信息: 1 Item1 IT00001 $100 2 Item2 IT00002 $200 3 Item3

码农 1795

EFCore 从已有数据库生成entities

从已有数据库添加控制代码: 1.在程序集中添加nuget包,包括Microsoft.EntityFrameworkCore.SqlServer,Microsoft.EntityFrameworkCore.Design,Microsoft.EntityFrameworkCore.Tools 2.在包管理控制台输入命令 Scaffold-DbContext "Data Source=(locald...

new_smile的专栏 558

数据库ER图基础概念整理

什么是ER图?ER图即是实体关系图! ER图分为实体、属性、关系三个核心部分。实体是长方形体现,而属性则是椭圆形,关系为菱形。 ER图中关联关系有三种: 1对1(1:1) :1对1关系是指对于实体集A与实体集B,A中的每一个实体至多与B中一个实体有关系;反之,在实体集B中的每个实体至多与实体集A中一个实体有关系。 1对多(1:N) :1对多关系是指实体集A与实体集B中至

贝伦酱 41万+

Ado.Net Entities Framework实例

1 新建库MyTestDB,在库下面新建表tb_Student,表字段定义如下图所示。   2 新建控制台应用程序MyTestDB。 3 在项目下新建ADO.NET实体数据模型。 在项目上右击--添加--新建项--选择“数据”--选择“ADO.NET实体数据模型”--输入名称--点击“添加”按钮   选择“从数据库生成”模型,点击“下一步”按钮   选择数据库连接,点击“下一步”按

三五月儿的专栏 3585

简单工厂,工厂方法与抽象工厂模式区别与联系(汇总)

      设计模式作为程序员的内功心法,相信每个写过OOP代码的都不会陌生,不过有些模式之间既有区别,又有联系,我们来看看简单工厂,工厂方法与抽象工厂的区别和联系。 一、简单工厂      简单工厂模式中工厂为具体工厂,产品为抽象产品,由工厂实例创建产品实例。 二、工厂方法      工厂方法中有抽象的工厂类,一种抽象的产品类,而工厂类中仅创建此抽象产品类的

GeneralXCK的专栏 3867

重温Observer模式--热水器·改(转载)

引言在 C#中的委托和事件 一文的后半部分,我向大家讲述了Observer(观察者)模式,并使用委托和事件实现了这个模式。实际上,不使用委托和事件,一样可以实现Observer模式。在本文中,我将使用GOF的经典方式,再次实现一遍Observer模式,同时将讲述在 C#中的委托和事件 一文中没有提及的推模式(Push)和拉模式(Pull)。设计思想概述在 C#中的

GeneralXCK的专栏 1185

LINQ to SQLLINQ to Entities场景之对照(原创

MSDN上最近发表了一篇Elisa Flasko著的文章,比较了LINQ to SQLLINQ to Entities适用的场景:Introducing LINQ to Relational Datahttp://msdn2.microsoft.com/en-us/library/cc161164.aspx 作者指出,LINQ to SQL主要的应用场景是针对微软SQL Serve

GeneralXCK的专栏 882

人生格言--将军

 人生总有许多要支撑,少年的梦想,青春的恋情,事业与友情等许许多多;然而这一切都有失去的可能; 人生总有几段黑暗的隧道要自己独行,这些路上没有乐队和鲜花,必须学会为自己伴奏,高歌而行; 为自己伴奏,就能够驱除心中的孤寂和恐惧,就能够从容的走过一个个泥泞的雨夜,在第二天的晴空下拥抱一个崭新的自己!  只要我们够坚强、够勇敢、够对立,别人就会对我们好一

GeneralXCK的专栏 849
上一篇: LINQ to SQL与LINQ to Entities场景之对照(非原创)
下一篇: asp.net mvc 1.0(5) - Action Filter, UpdateModel, ModelBinder, Ajax, Unit Test(非原创)
GeneralXCK
博客等级 码龄17年 22粉丝 297原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值