ORM(精选五篇)
ORM 篇1
面向对象的开发方法是当今企业级应用软件的主流开发方法, ORM (Object/Relation Mapping, 对象关系映射) 技术是伴随着面向对象的软件开发方法的发展产生的。
在企业级应用软件中, 数据库是不可或缺的一部分, 关系数据库是企业级应用软件中永久存放数据的主流数据存储系统。
对象是来自业务实体的一种映射, 对象和关系数据是业务实体的两种不同的表现形式。业务实体在内存中表现为对象, 在数据库中表现为关系数据。内存中的对象之间存在关联和继承等关系, 而在数据库中, 关系数据无法直接表达多对多关联和继承的关系。因此, 对象关系映射 (ORM) 系统应运而生, 它的作用就是实现程序对象到关系数据库数据的映射, 将关系数据库体现为对象形式, 以便于按统一风格进行操作。ORM一般以中间件的形式存在, 目前, 很多厂商和开源社区都提供了面向对象的数据持久层产品, 这里边包含JAVA系列和dot NET系列的众多产品, 例如LINQ-to-SQL就是其中较为优秀的一员。
1. LINQ的特点和优势
LINQ是微软在dot NET3.0推出的一种新型数据访问和处理方式, 用以解决以往处理集合对象数据所遇到的种种困难。LINQ称为语言级集成查询 (Language Integrated Query) , 它定义了一组标准查询操作符, 在C#3.0和VB9中分别引入了和SQL相似的LINQ语法, 使得各种数据对象的操作变得非常容易、风格一致而且可读性更好。
LINQ的主要优点体现在, 它定义了一种标准, 不但可以用于关系数据库的查询, 还可以用于文本文件、XML文件以及使用同一语法的其他数据源的查询。LINQ的结构如图1所示。
从这两个例子可以看出LINQ与传统的数据访问层技术的不同。归纳起来, LINQ的特点包括:
LINQ是一种语言概念
LINQ的查询功能非常强, 它可以包含联合查询、where子句、分组等功能
LINQ与数据库无关——开发人员能够基于LINQ进行灵活扩展 (比如利用LINQ to XML, LINQ to SQL, LINQ to datasets, LINQ to Entities, LINQ to Objects) , 也就是说, 开发人员能够使用LINQ去查询多种类型的数据源
LINQ使开发人员摆脱了必须编写复杂而且风格各异的代码才能操作不同数据源的窘境, 代之以一种统一而又简单的语法形式来完成数据操作, 从而在最大限度上提高了整体软件的开发效率, 节约了开发成本。
2. LINQ的弊端
和现实生活一样, 凡事有利必有弊, LINQ也不例外。ORM的实质是增加了一个处理层以实现各类转换, 因此必然有性能上的代价。
2.1 代码调试困难
LINQ给代码调试带来一定困难。使用了LINQ以后, 开发人员经常很难找出到底是哪句代码抛出了异常。LINQ的优势是代码开发的快速高效, 弊端就是可能导致代码调试负担加重。要弥补这一缺陷, 只能通过严格的代码调试训练, 使调试时间的额外负担在一定程度上缩短。
2.2 变更困难
LINQ使得由数据库变更而引起的变更变得非常困难。这是一个不争的事实, 但也不是没有补救办法。运用了ORM技术会使得从应用变更中抽象出数据库变更变得更加容易, 所以如果应用程序架构设计合理, 并且在此基础上需要数据库变更 (当然前提是使用了LINQ to SQL等架构) , 开发人员就只需要对代码做极少的变更甚至不需要做任何代码变更。真正必须要做的仅限于映射层的变更。
2.3 程序运行效率下降
LINQ使程序的运行性能下降, 这是ORM产品最受争议的一点。当然, 为了对比LINQ和非LINQ环境的性能, 需要做非常全面和严格的测试, 并且要确保测试针对的是相同性质的环境和对象, 这样才能得出严谨的评测结论。
与ADO.NET相比, LINQ的性能确实比较慢——即便做了所有可能的优化, 在很多情况下也会是这样的结果, 原因是ORM增加了一个额外的处理层。因此, 在某种程度上可以说ORM是用程序性能的下降作为代价, 换得了数据访问的一致性和灵活性。
3.LINQ to SQL
LINQ的实质是一种语法规范, 而LINQ to SQL是使用了ORM技术的一种产品, 是一个ORM框架, 专门用于减轻数据库访问的负担。LINQ to SQL是微软提供的LINQ Provider的一种, LINQ架构中还有LINQ To Dataset、LINQ To Xml、LINQ To Entity等用于访问各类数据源的其他成员, 都是基于LINQ技术的。
LINQ to SQL并不直接与数据库沟通, 而是通过对象模型来统筹与数据库的沟通、查询、异动与交易。映射到数据库表或视图的LINQ to SQL类称为实体类, 该实体类的属性映射到所选表或视图中的列。
广泛的技术讨论和争论大多数针对的是这些具体产品。
4. 结论
无论技术讨论将怎样继续下去, 有一点可以明确的就是, ORM技术肯定有非常重要的优势, 在处理大量集合数据的时候能够显著提高开发效率。如果一个架构师能够分析判断出ORM确实对项目有利, 那就没有必要犹豫。每项技术都是各有利弊的, 作为一个明智的架构师, 最重要的是明确项目需求, 然后选择最适合的技术, 而不是一味追求所谓完美的技术。
无论现有的技术将如何应用, 无论今后的技术将如何发展, 最重要的永远是正确分析技术, 并且确保所选的技术满足业务需求。如果一个项目对于运行效率的要求非常苛刻, 那么开发人员就应该准备好花费多出10倍的时间用于开发基于ADO.NET的应用程序, 以此来交换2%的性能提升, 这个时候, 使用ADO.NET也是正确的。
归纳起来一句话, 满足需求的技术就是好技术, 理性选择才是根本。
参考文献
[1]Kannan M Ambadi, http://weblogs.asp.net/kannan ambadi/archive/2009/01/16/orm-technology.aspx, 2009-1-13
ORM 篇2
报
矿环保计量中心“ORM”管理情况汇报
自矿召开“精细管理深化年”启动大会后,我们环保计量中心立足实际,务求实效,在巩固完善已创工作运行机制的基础上,以全面实施“orm”管理为着力点,进一步提升境界,拓展深化,全力构建“orm”管理工作的长效运行机制,促进了全科各项工作健康有序开展。我们的主要做法是:
一、提高境界抓认识,深刻领会“orm”管理的基本内涵
只有高境界的认识才能带来高质量的工作。为进一步提高全科人员对“orm”管理基本内涵的认识,深刻理解以
“不求最大,只求更好”为核心的杨村理念,我们切实选用各种工作载体,以理念渗透为突破口,加强职工的思想教育。一是充分利用班前班后会、党团活动日、职工集体学习日,认真学习、背诵理解矿12条企业理念,集中组织了3场全科人员参加的理念闭卷考试,同时,制作出了理念牌板,悬挂到醒目处,使职工逐步实现从认知到认同、从认同到自觉行动的转变,确保理念覆盖到全科各个岗位,渗透到每个职工之中。二是各班组定期召集职工通过各种形式的讨论会消化理念内涵,做到不仅要会背,而且要会讲,加深对理念的理解,切实把理念运用到实际工作中去,使学习理念、理解理念、运用理念蔚然成风。三是认真挖掘去年在精细管理工作中成效明显的先进职工和个人标兵,把典型事迹编成“小故事”,用身边人讲身边事,请先进典型讲理念,实现理念人格化。通过持之以恒的理念渗透,把理念由表及里、由粗到精地渗透到职工的心灵深处,从
表面接触递进为理性理解,由理性理解升华为行为意识,实现了职工在统一目标下的自我管理。
二、准确定位求升华,努力开创“orm”管理工作新局面
在实际运作过程中,我们把工作的着力点放在“orm”管理与已运行较长时间精细管理的有效衔接上,使之能够在已有工作基础上,拓展深化,提高升华,不断获取新的生机和活力,实现新的发展,谋求新的突破,努力开创“orm”管理工作的新局面。
环境刷新,形象塑造。改善环境不仅仅是为了塑造科室的形象,更重要的是陶冶职工情操,提升职工精神品位。我们采取总体规划、分片治理、逐步优化、巩固提高的方法,加大了对全科办公、工作环境的整洁力度。首先对每个办公室的用具进行了统一的购置、调整。把规格不等的办公桌椅、橱柜进行了统一刷漆,然后按照桌子规格、大小、颜色进行了合理调配,实现了每个办公室
内的协调统一。其次,统一购买了玻璃板、文件箱、茶杯等办公用品,保持了办公环境的整洁、美观和统一。第三,对工作区域进行了绿化、美化和亮化,进一步增进了职工的工作责任心和自豪感。
细化标准,严抓考核。工作标准的细化是提高管理水平和效率的重要保证。我们按照5e标准、职工6s行为养成的具体内容,结合不同岗位特点,进一步细化明确了各岗位标准和责任,制订出全科10个岗位工作标准,共计378项,保证了监督、检查、考核的科学合理性。在考核工作中,大力推行了abc三卡管理,专门成立了考核领导小组,针对不同岗位制订出不同的考核标准和细则,形成管理考核表,每天按照考核表的具体内容对各岗位职工进行一次考核。同时,在制定完善各岗位定性的、日常的、规范的“5e”静态标准的同时,还在不确定的季节性、阶段性、临时性工程中实行5e动态标准,把过去简单、精放、随意的管理转变为精细管理,增强了工作的严肃性,减少了随意性和盲目性,杜绝了工作中的扯皮现象,实现了由被动工作到主动工作、由安排工作的依赖性向权威性、完成任务的随意性向严肃性的三大转变。机电维修班负责全矿供水、排水泵房及污水处理站机电设备的日常检修任务。按照具体的工作标准,他们在人员较少的情况下,克服点多面广的实际情况,坚持每周对各岗点巡检三次,有效确保了设备无故障运转,至今未发生一起责任事故。
坚持走动,形成闭合。在走动式管理中,我们要求全科所有管理人员对18个岗点,每天坚持两小时走动,形成了“图、表、卡、题”的“四字程序标准”。持卡巡查走动的管理人员必须发现和解决1—2个问题,并和现场人员互动签字。通过示意图和网络表可以看到管理人员正在何地点巡查走动,以及是否存在空白地点。严格的考核制度形成了有效的监督和制约体系,使管理人员走动的全
过程实现了闭合化管理。自实施“orm”管理以来,共实施走动320次,发现各类问题536条,现场处理和解决487条。通过推行走动式管理,管理人员的问题意识、责任意识普遍增强,现场发现问题和解决问题的能力进一步提高。全科呈现出了“干部沉下去、形象升上来、干部动起来、职工干起来”的喜人局面。
三、整体推进务实效,实现“orm”管理工作的新突破
通过实施“orm”管理,凝聚了人心,鼓舞了干劲,提升了素质,改变了形象,全面提高了管理水平和管理效率。主要体现在:
第一,职工队伍的凝聚力和战斗力进一步增强,整体工作上了新台阶。通过5e标准,使职工明确了岗位标准和责任,增强了工作的责任感和团队协作意识,激发了职工工作的积极性和主动性,工作质量和工作效率得以不断提高。
第二,使职工精神面貌和形象发生了深刻变化。通过6s的推行,逐步杜绝
了职工的不良行为习惯。abc三卡的运作,增强了职工的责任感、及文明意识和岗位正规操作意识,由要我干到我要干,我能干,我会干,既转变了思想观念,又提高了自身素质。通过形象刷新,对办公环境、作业环境进行了彻底的整顿清理和美化改造,脏、乱、差的环境改变了,取而代之的是整洁靓丽、舒适优美的新形象。
第三,实现了管理的根本性转变。工作中,人人、事事、处处有标准、有记录、有考核、有落实、理顺了工作头绪,提升了管理水平。同时,制度面前人人平等,体现了公开、公平、公正的原则。从严过细、统一标准的精细管理考核取代了过去标准不一的随意性考核,实现了管理者与被管理者的双向互动,进一步密切了干群关系。
总之,在实施“orm”管理工作中,我们做了大量艰苦细致、卓有成效的工作,也取得了一定的成绩。但是,与矿党政的要求,与先进单位相比,还存在
ORM 篇3
关键词:Java,Hibernate,框架,对象,对象关系映射,ORM
0 引言
ORM的全称是Object Relational Mapping,即对象/关系映射。ORM也可理解成一种规范,它概述了这类框架的基本特征:完成面向对象的程序设计语言到关系数据库的映射。基于ORM框架完成映射后,既可利用面向对象程序设计语言的简单易用性,又可利用关系数据库的技术优势。
ORM框架是面向对象程序设计语言与关系数据库发展不同步时的中间解决方案。ORM主要用于解决面向对象编程语言和关系数据库之间不协调的问题。
1 Hibernate简介
Hibernate的轻量级ORM模型逐步确立了在Java对象关系映射架构中的地位,而且它的许多设计还被Java EE标注组织吸纳成为EJB3.0规范的标准。
对于Java EE应用而言,不可避免地涉及数据库的访问,而目前的主流数据库都是关系数据库,Java EE应用的编程语言纯粹的面向对象。Hibernate允许开发者采用面向对象的方式来操作关系数据库。因为有了Hibernate支持,使得Java EE应用开发过程的OOA(Object Oriented Analysis,面向对象分析)、OOD(Object Oriented Design,面向对象设计)和OOP(Object Oriented Programming,面向对象编程)三个过程一脉相承,成为一个整体。
ORM框架的工作对于开发者完全透明,当我们在关系数据库的基础上,包装了一层ORM框架后,应用程序能以面向对象的方式操作数据库,仿佛应用程序面对的是一个面向对象的数据库。当使用ORM框架映射数据库时,大致上遵循如下规则:每个持久化类映射到一个数据库表,而持久化类的属性,则映射到数据表的数据列。持久化类和数据表之间存在如下图的关系。
另外持久化类的实例也可以和每行数据之间存在一一对应的关系
2 Hibernate的优势
✧ 开源和免费License,方便需要时研究源代码、改写源代码、进行功能定制
✧ 轻量级封装,避免引入过多复杂的问题,调试容易,可减轻程序员的负担。
✧ 具有可扩展性,API开放。功能不够时,可自己编码进行扩展。
✧ 开发者活跃,产品有稳定的发展保障。
✧ 大幅度减少开发时人工使用SQL和JDBC处理数据的时间。
✧ 轻松实现不同数据库之间的转换,无需重新编写SQL语句。
✧ 通过可扩展标记语言(XML)实现了类和数据表之间的映射,使程序员在业务逻辑的开发中面向数据库而改为面向对象开发。使整个项目开发分工更加明确,提高了程序开发效率。
3 Hibernate的使用
3.1 Hibernate核心接口
在使用Hibernate框架时非常关键的一点就是要了解Hibernate的核心接口。Hibernate接口位于业务层和持久化层。Hibernate共有5个核心接口:Session、Session Factory、Configuration、Transaction、Query(或Criteria)。在开发的时候基本上都要用到这5个接口,通过这些接口对持久化对象进行存储和事务控制。各个接口的介绍如下:
在具体的应用中,Hibernate的启动与内部分工协作的关系如图:
了解了Hibernate的核心API关系和作用后,使用Hibernate的步骤就很清楚了。使用步骤为:
1)引用Hibernate所需要的jar包。Jar包中包含了所有Hibernate所需的API
2)编写Hibernate的配置文件既Hibernate.cfg.xml(也可以用hibernate.properties),配置数据库的JDBC连接URL、驱动类全名、用户名、密码数据库方言(不同的数据库使用的方言不同)、连接池信息
3)编写所需持久化对象的Bean和数据库表之间ORM映射文件(*.hbm.xml)。
4)将ORM映射文件注册到Hibernate.cfg.xml(或Hiernate.properties)中。
经过以上4步后就可以在你的业务逻辑中将数据库表当成一个对象来使用了,从而达到了面向对象编程的目的。
3.2 Hibernate映射类型
在对象/关系映射文件中,Hibernate采用映射类型作为Java类型和SQL类型的桥梁。Hibernate映射类型分为两种:内置映射类型和自定义映射类型。Hibernate对所有的Java原生类型,常用的Java类型如String、Date等都定义了内置的映射类型。下表列出了Hibernate映射类型、对应的Java类型以及对应的标准SQL类型。
Hibernate提供了自定义映射类型接口,允许用户以编程的方式创建自定义的映射类型。用户自定义的映射类型需要实现net.sf.hibernate.UserType或net.sf.hibernate.Composite User Type接口。3.1.3 Hibernate实体对象关联关系的映射数据库各个表之间可以通过主键外键等方式做一些关联。但是在实际开发中很少用到这样的关联关系,因为要做好数据库表之间的关联又不增加开发人员的难度对DBA的要求比较高,而使用Hibernate就可以很好的解决这一问题,通过Hibernate也可以实现数据库中的关联关系,而且不需要DBA专门来维护数据库,只需DBA提供关联方案开发人员就可以轻松实现各个数据表之间的关联关系。由于Hibernate通过ORM将数据库表转换成了对象那么在实际操作中开发人员其实是对各个对象之间做了关联。
一般Hibernate中使用映射关系有以下几种:
✧ 一对一关系
✧ 一对多关系
✧ 多对一关系
✧ 多对多关系
另外Hibernate还可以实现继承映射和批量插入、更新、删除操作。
3.3 Hibernate查询方法
Hibernate执行查询功能的基本方法有两种:一种是得到单个持久化对象的get( )方法和load( )方法,另一种是Query对象的list( )方法和iterator( )方法。在开发中应该依据不同的情况选用正确的方法。
get( )方法和load( )方法的区别在于对二级缓存的使用上。load( )方法会使用二级缓存,而get( )方法在一级缓存没有找到的情况下会直接查询数据库,不会去二级缓存中查找。在使用中,对使用了二级缓存的对象进行查询时最好使用load( )方法,以充分利用二级缓存来提高检索的效率。
list( )方法和iterator( )方法之间的区别何以从以下几个反方面来进行比较。
✧ 执行的查询不同
✧ 对于list( )方式的查询通常只会执行一个SQL语句,而对于iterator( )方法的查询则可能需要执行N+1条SQL语句(N为结果集中的记录数)。
✧ 缓存的使用
✧ iterator( )方法可以充分利用二级缓存,list()方法不能。
✧ 对于结果集的处理方法不同
✧ list( )方法会一次获得素有的结果集对象,而且它会依据查询的结果初始化所有的结果集对象。而使用iterator( )方法不会一次初始化所有对象,避免占用过多缓存。
所以,在使用Query对象执行数据查询时应该从以上几个方面去考虑使用何种方法来执行数据库的查询操作。
4 Hibernate性能优化
Hibernate是对JDBC的轻量级封装,因此在很多情况下Hibernate的性能比直接使用JDBC存取数据库要低。然而,通过正确的方法和策略,在使用Hibernate的时候还是可以非常接近直接使用JDBC时的效率的,并且,在有些情况下还有可能高于使用JDBC时执行效率。HQL(Hibernate Query Language)查询提供了更加丰富的和灵活的查询特性,因此Hibernate将HQL查询方式立为官方推荐的标准查询方式。
在进行Hibernate性能优化时,需要从以下几个方面进行考虑:
✧ 数据库设计调整。
✧ HQL优化
API的正确使用(如根据不同业务类型选用不同的集合及查询API)
映射文件的优化(ID生成策略,二级缓存、延迟加载、关联优化)
✧ 一级缓存的管理
事务控制策略
数据库的查询性能往往是影响一个应用系统性能的主要因素。对查询性能的影响会涉及到系统软件开发的各个阶段,例如,良好的设计、正确的查询方法、适当的缓存都有利于系统性能的提升。
5 总结
Hibernate是一个免费的开源Java包,是一种Java语言下的对象关系映射解决方案,为面向对象的领域模型到传统的关系型数据库的映射,提供了一个使用方便的框架,使得与关系数据库打交道变得十分轻松,这样开发者可以专注于应用程序的对象和功能,减少了编写数据库SQL语句的重复性劳动,减少开发工作量,提高开发效率。
当然,对象/关系映射(ORM)工具自身具有一定的复杂性,开发人员必须学习和掌握它们的详细使用规则,并修改组成应用程序的类以满足映射系统的需要。
参考文献
[1]陈天河,《Struts、Hibnerante、Spring集成开发宝典》,电子工业出版社,2007
[2]李刚,《整合Struts+hibernate+Spring应用开发详解》,清华大学出版社,2008
ORM 篇4
Entity Framework是微软公司开发的对象关系映射工具(Object Relational Mapper简称ORM),他实现业务模型和关系型数据之间的相互映射。开发人员基本可以在不使用底层代码的情况下实现数据访问(data access)。Entity Framework给开发人员提供了一套易于理解的基于模型的系统,它可以将开发人员从编写数据访问层和域模型相同的代码的工作中解脱出来。Entity Framework的最初是随着.NET Framework 3.5 SP1和Visual Studio 2008 SP1一起发布的,名称为Entity Framework3.5,目前的最新版本是Entity Framework 7。
Entity Framework可以非常容易的将概念模型的实体和关系生成数据访问层。应用程序可以非常容易的执行CRUD(create,read,update,delete)操作,以及实体间的一对一、一对多和多对多的关系。Entity Framework还有很多好处,比如:可以比ADO.NET进行数据访问更加快捷,可以通过高级程序语言(C#等)来编写数据访问逻辑等。Entity Framework与数据库的访问最终还是通过ADO.NET来完成的。
2 理解实体对象模型
概念数据模型是Entity Framework的关键。为了使用Enti⁃ty Framework,我们必须创建概念数据模型实体对象模型(Enti⁃ty Data Model,简称EDM)。EDM定义了模型类、类和类之间的关系以及模型和数据库图表的映射。
EDM一旦被创建,就可以执行对概念模型执行CRUD的操作,该操作将对象查询装换为数据库查询。查询后的结果将通过Entity Framework再一次装换为概念模型。Entity Framework将实体对象查询和数据库查询的转换关系,关系型数据和概念模型的映射关系存储在EDM中。
3 理解Object Context类
EDM被准备后,我们可以对对象模型执行CRUD操作。这种操作需要使用Object Context类。Object Context类是Entity Framework的主要对象。Object Context负责管理在EDM中的实体。这个类主要负责:1)管理数据库的连接;2)对CRUD操作提供支持;3)跟踪对象模型使其更新到数据库,Object Context类中的Save Changes方法可以将新的或者改变的对象保存到数据库。
还有另外一个类名为Db Context非常类似于Object Context类。Db Context类只是对Object Context类的一个包裹器。Ob⁃ject Context不是最新的类,Db Context类对于数据库连接的管理和执行CRUD操作都是较好的API。
4 Entity Framework的开发风格
一些项目的开发都是分为数据库和应用程序两个开发部分,通常首先设计数据库,完成后才开始应用程序的开发。但是根据需求分析的要求,应用程序的开发通常都是要求首先建立概念域模型,数据库的表的建立是通过概念域模型来建立的,最后应用程序将实现响应的业务逻辑。还有一种可能性是,创建的应用程序是高度以领域为中心,域模型通过类来实现,数据库只是用来维持这些模型的关系。
Entity Framework提供了对以上场景的不同的支持。可以将其分为三种不同的方法。1)数据库优先(Data Base First);2)代码优先(Code First);3)模型优先(Model First)。应该根据具体开发场景的分析,权衡选择哪一种方法。
4.1 数据库优先
数据库优先的方法,主要好处是一旦数据库被创建好了,开发人员将花比较少的时间来编写数据访问层。EDM能够从数据库来创建,并且可以根据程序的需要来改变。满足的使用数据库优先的条件有:1)数据库已经创建完成了,或者在已有的数据上进行开发;2)应用程序是以数据为中心的,应用程序的改变是否基于数据库频繁的改变而改变。
4.2 代码优先
代码优先的方法通常被用于业务逻辑类已经被建立好了,数据库只是简单的被用来提供数据持久的作用。满足的使用代码优先的条件有:1)模型类已经创建好了,只是想通过数据库来进行数据的持久化;2)需要完成模型类之后才考虑是否需要将数据存储到数据库;3)开发人员不喜欢生成类而更加偏爱编写类。
4.3 模型优先
模型优先的方法,可以创建概念模型来创建数据库,之所以使用这种方法的原因是:在Visual Studio中使用模型优先的方式可以通过Visual Entity Designer来进行EDM的创建。
5 通过LINQ to Entities查询实体数据模型
LINQ(Language-Integrated Query)是.NET Framework中的数据查询技术。LINQ to Entities是对应用程序使用LINQ去指定需要获得的数据的实体对象模型作了一个良好的抽象,LINQ to Entities提供者负责处理访问数据库和为应用程序获取需要的数据。当应用程序使用LINQ to Entities去执行LINQ查询实体数据模型,LINQ首先在编译时决定需要获取哪些数据,然后,它将被执行,结果返回为CLR对象。然而,如果想理解整个过程,关键是理解被执行的查询和获取.NET对象的结果。
大体的查询过程是:应用程序创建LINQ查询;LINQ to En⁃tities依赖能够工作在Entity Framework概念对象模型的Entity⁃Client,使用Entity Framework的对象实体模型将Entity Client命令转换为SQL查询;SQL查询通过ADO.NET被传递到数据库;在数据库中执行查询;查询结果返回到Entity Framework;Enti⁃ty Framework将结果转换为CLR类型域实体;Entitiy Client将使用投影将需要的结果返回给应用程序。
6 通过Entity SQL查询对象模型
Entity SQL(ESQL)提供了类似于SQL的语法,可以去编写针对模型类而不是针对数据表的查询。虽然,当涉及实体数据模型的查询时ESQL是一个很少使用技术,但是,当涉及对数据模型执行动态查询时它却十分有用。另一个使用ESQL的好处是开发人员只需要知道实体数据模型的架构,而不需要知道数据库的架构。如果开发人员比较熟悉SQL语言,那么使用ES⁃QL将是十分容易的事情。
如果开发人员使用Object Query去编写ESQL,查询将被执行在对象层,也就是ESQL将获得实体模型。相比之下,如果开发人员使用Entity Command去编写ESQL,查询将执行Entity Cli⁃ent,会获得只读的数据行集合。
7 总结
本文讨论了ORM和通过ORM轻松地完成数据访问代码。并讨论了Entity Framework是如何工作的,以及Entity Framework实现的三种方法,并且为不同的场景该如何选择哪种方法做了一些讨论。还阐述了LINQ to Entities如何查询实体数据模型和Entity SQL如何去查询实体数据模型。还了解了Entity SQL在Object Query和Entity Command两种情况下获得数据的方式。本文只是对Entity Framework常用特性作了概述,由于篇幅所限,没有对Entity Framework进行代码举例,还有一些高级特性,诸如并发管理和事务管理等知识未涉及到。既是对知识的拾遗也为抛砖引玉之用。
摘要:该文主要研究了微软的Entity Framework是如何工作的,以及Entity Framework实现的三种方法,并且为不同的场景该如何选择哪种方法做了一些讨论。还论述了LINQ to Entities如何查询实体数据模型和Entity SQL如何去查询实体数据模型。
关键词:ORM实体对象,数据模型,Entity Framework
参考文献
[1]百度百科.Entity Framework[EB/OL].http://baike.baidu.com/link?url=b Ee Kvfk_9KDdi Pn Zkj AHQlrk RKa6ls_fzak Di-Gqbs__HLdd Rw9Go Sypeh KGo Sypeh KNP2s Gz Rqj Wet V3Mr W2K.
ORM 篇5
关键词:Entity Framework实体框架,ORM框架,实体框架
一般而言,开发人员利用传统技术进行系统研发时,在数据持久化方面往往需要跟数据库进行数据交换。而在.NET平台中数据存取技术从它的发展历程来看,通常有ODBC、DAO、ADO、ADO.NET等这几种不同的数据访问层使用方式,开发人员最常用的是手写SQL语句然后通过ADO.NET连接类与数据库进行交互,这种方式是目前进行数据库开发时主要的开发技术。虽然它是最接近数据库的底层且执行效率是最高的,但是普遍存在SQL注入的风险,而且当业务发生了轻微的变化时也需要对数据访问代码进行大量的修改,它所耗费的时间和精力都比较大。针对编写SQL访问数据库这种传统技术的缺点,微软新一代基于.NET平台的ORM数据访问技术Entity Framework应运而生。
1 技术概述
EF是一种基于ORM对象关系映射的框架,通俗地说就是它能够使编程人员无需编写繁琐的SQL语句就可以使用对象映射到底层的数据库结构。例如,开发人员在数据库中建立了一个用户USER表,在应用程序中建立了一个与之对应的USER实体类,那么两者之间就建立了一种映射关系。EF就可以把从数据库传回的记录集转换为对象,也可以依据对象当前所处的状态生成一系列相应的SQL命令发给数据库,完成数据的存取工作。这样开发人员在编写应用程序时就不必再关注于数据存储的细节,转而将精力放在业务逻辑上,而不是数据访问层上。
1.1 实体数据模型
EF的本质是一个ORM的框架,它需要把对象映射到底层的数据库表中,为解决这种映射关系,EF使用了3种数据模型来进行具体的描述:
(1)概念模型(Conceptual Model):由概念架构定义语言文件(.csdl)来定义,是一种实体类,它定义了应用程序的业务层所知道的实体和关系,经常供开发人员所使用。
(2)存储模型(Storage Model):由存储架构定义语言文件(.ssdl)来定义,是一组与底层数据存储介质(如数据库系统)等直接相对应的类,它描述了表、列、主键、索引、关系等一系列数据库中存在的概念。
(3)概念—存储模型映射(Conceptual—Storage Mapping):由映射规范语言文件(.msl)来定义,它是为了解决“概念模型”中的类如何与“存储模型”中的类相互对应的问题。
现以关系图来描述三者之间的关系,如图1所示。
1.2 三种开发模式
(1)Code First模式:提前编写各种类如实体类对象,数据关系类等代码,然后根据现有代码的描述,EF会自动创建数据表及其各种对应关系。
(2)Database First模式:它是基于原有的数据库,然后利用EF生成器创建与数据表一一对应的实体类对象,创建数据表与实体类相匹配的各种对应关系等。
(3)Model First模式:先利用EF生成器设计出实体模型以及他们之间的关系,然后根据这些实体与关系,生成实体对象相关的代码与数据库对象。
将重点讲述Code First开发模式的流程。
2 基本操作
对于EF框架来说,CRUD是其核心功能。CRUD是指在做计算处理时进行的增加(Create)、读取查询(Retrieve)、更新(Update)和删除(Delete)操作。这4种操作主要被用于持久层的数据存取,同时也是开发人员编写代码时最基本的操作。
2.1 创建实体类对象模型
先编写两个实体类对象,分别是User类和Car类,它们之间存在一对多的关系。
将虚拟化两个属性(User.Cars和Car.User),这样就可以启用实体框架的延迟加载功能。延迟加载意味着尝试访问这些属性内容的时候,将自动从数据库加载。
2.2 创建上下文
定义一个派生自System.Data.Entity.Db Context的上下文Application Db Context类,并为模型中的每个类公开一个类型化Db Set<TEntity>,这个派生类是用于表示数据库的一个会话,可以供我们查询、增加、修改和删除数据等数据持久化操作。
2.3 增加(Create)操作
使用Entity Framework的代码无需使用事务,EF会正确地处理表关联,部分代码如下:
2.4 读取查询(Retrieve)操作
直接输入查询条件,EF会执行相关的SQL语句,部分代码如下:
2.5 更新(Update)操作
更新某个用户的姓名属性,需要先将要修改的数据加载到内存中,然后再进行修改,部分代码如下:
2.6 删除(Delete)操作
EF中删除数据之前要先把数据加载到EF上下文中,然后再进行删除操作。部分代码如下:
3 结语
通过系统分析Entity Framework框架的原理及其CRUD 4种核心功能的操作,并且举例说明Code First开发模式的过程,阐述了EF在数据持久化方面拥有原生SQL语句不可伦比的功能,大大提高开发效率和减少各模块之间的依赖性。EF作为一种ORM框架,最主要的是为开发人员在开发系统时提供一种强大的利器,从而减少开发时间和精力。
参考文献
[1]马鹏烜.基于Entity Framework数据持久化技术浅析.电脑与信息技术,2011,08.
[2]赵亮.使用Entity Framework快速开发ASP.NET网站.企业导报,2012,(18).
[3]姚远,胡文俊,余泽伟,黄玉兰.Entity Framework技术及其应用.软件导刊,2015,11.