浅谈实体框架

时间:2022-09-04 02:34:01

浅谈实体框架

摘要:LINQ to SQL、nHibernate、实体框架……面临这么多种选择,一位架构师应该如何抉择?不同问题采用不同的解决方法,该文简单介绍了实体框架的特点,并将实体框架与LINQ to SQL和nHibernate的性能进行了对比。

关键词:实体框架;ORM;LINQ to SQL;nHibernate

中图分类号:TP311文献标识码:A文章编号:1009-3044(2011)18-4372-02

在设计和开发面向数据的应用程序时,架构师和开发人员一方面为要解决的业务问题的实体、关系和逻辑构建模型,同时还必须处理用于存储和检索数据的数据引擎。数据有可能来自多个不同协议的存储系统,甚至使用单存储系统的应用程序也需要权衡存储系统的要求和高效、易维护的程序代码二者之间的取舍。

实体框架可以使开发人员可以采用直接针对域的对象和属性(如客户和客户地址)的形式使用数据,而不必考虑存储这些数据的基础数据库表和字段。借助实体框架,开发人员在处理数据时能够以更高的抽象级别工作,并且能够以相比传统应用程序更少的代码创建和维护面向数据的应用程序。

1 实体框架简介

实体框架是.NET Framework的一个组件,是以目前非常成功的框架为基础,支持开发面向数据的软件的一套技术。实体框架应用程序可以在任何安装了dot NET Framework 3.5 SP1以上版本的计算机上运行。实体框架需要LINQ的支持。其结构如图1所示。

关系数据库存储数据的方式通常与应用程序使用数据的方式不同,当设计面向对象的应用程序时,其困难在于如何编写高效的、可维护的代码而不必牺牲数据访问、存储和可扩展性方面的高效性。实体框架支持表示数据库中的关系架构的逻辑存储模型,以逻辑模型表示关系数据库的构架,以业务实体表示概念模型,同时使用映射层在模型之间搭建桥梁。因此,实体框架的结构中有三个处于活动状态的层:概念层、映射层、逻辑层,这三层允许将数据从关系数据库映射到更加面向对象的业务模型。

2 实体框架与ORM产品

近年来,以LINQ to SQL、nHibernate等为代表的ORM(Object Relational Mapping,对象关系映射)产品受到软件设计开发人员的欢迎,它们都是使用了ORM技术的产品,都是为实现更语义化、更自然的数据查询,使程序员可以随心所欲使用对象编程思维来操纵数据库。某些方面与实体框架有异曲同工之妙。

1)实体框架与LINQ to SQL

LINQ to SQL是依托LINQ结构的一个ORM框架产品,与实体框架的区别比较大。

第一个区别在于,实体框架有完全提供者模型,这意味着只要提供者上线就能使用实体框架,访问范围不仅限于SQL Server,还包括Oracle、DB2、Informix、MySQL、Postgresql等。而LINQ to SQL只支持SQL Server。

第二个区别是,LINQ to SQL提供的映射能力有限。LINQ to SQL的类与数据库表必须一对一(一种继承形式是例外,即所有继承体系中的实体类型都在一个单表中,其中包含一个标志字段用于标示某行属于哪个实体类型)。在实体框架中可以实现多个表对应一个实体类,它还有一个客户端视图引擎,可以将用于概念模型的查询和更新转换成对于数据库等价的操作,映射层为各种转换生成相应的视图。由此可以在实体框架中运用多种继承策略:假设有一个水果的继承结构,包含水果、苹果:水果、桔子:水果等成员。程序员不仅能像LINQ to SQL一样创建一个包含所有水果、苹果、桔子属性的单表,并在其中增加一个字段用于指明是否某一特定的记录只是泛指的水果、苹果或桔子。也可以建立三个表,每个表只有某种特定类型的所有属性(苹果、桔子的表不仅要有自己的特征字段,也要有所有与水果相同的字段);或者建三个表,苹果和桔子的表只有主键和各自特定的属性,当生成一个苹果的对象时需要用到苹果表和水果表的联接。还能进一步将以上策略结合起来,可以使某些继承关系存在于一张表,另一些存在于不同的表。

2)实体框架与nHibernate

因为nHibernate是一个支持多种数据库的典型ORM,所以实体框架与nHibernate之间的区别并不像和LINQ to SQL之间那么大。nHibernate是一个交互性更强的产品,很多方面比实体框架更具备ORM的特征。实体框架和nHibernate二者之间的一个最大差别在于实体数据模型(Entity Data Model,EDM),以及微软基于EDM构建的需要长期运行的数据平台。实体框架通过特别的构造,将查询/形成结果的映射过程与构建对象和变更跟踪分离开来。这种方式让创建概念模型变得更容易,而概念模型让使用者可以考虑如何实现数据,以便随后能在其他很多包含了这些构建对象的服务中重用数据。长期以来,微软把EDM的思想融入到多个微软产品中,以至于假如使用者拥有一个实体数据模型,就可以基于这个模型自动创建面向REST的Web Service( Data Service,即Astoria);编写报表(Reporting Services);还可以在服务器和脱机客户端存储库中同步数据,这些数据可以作为实体进行原子性移动,即便这些实体是从服务器上的多个数据库表中抽取出来的;也可以从实体感知的构建部件中创建工作流,等等……所以,所谓的不同点关键并不是实体框架比nHibernate支持更复杂的映射功能或其他类似的东西,而是在于――实体框架不仅仅是一个ORM,它是在基于实体理念的数据平台中庞大愿景中的第一步。

3 结束语

任何技术都不会完美无缺,虽然实体框架有诸多优势,但它的劣势也很明显,即由于架构层次复杂化,导致程序运行效率下降。

对于一个架构师来说,对任何一项技术的过分追捧都可能有失偏颇,衡量技术性能的优劣永远和业务需求密切相关。理性分析,根据业务性能的需求选用合理的技术才是最为明智的选择。

参考文献:

[1] 傅棋灿,史浩山.基于Linq to NHibernate数据库应用系统的设计与实现[J].微型电脑应用,2010,26(12).

[2] 张善友 实体框架概述[EB/OL].(2008-08-16)./shanyou/archive/2008/08/16/4681360.aspx.

注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文

上一篇:UML在图书馆短信催还系统中的应用 下一篇:保险公司呼叫中心系统的设计与实现