APP下载

基于EF的数据建模方法

2015-09-18李知杰赵健飞

软件导刊 2015年8期

李知杰++赵健飞

摘要:在开发ASP.NET MVC大中型项目时,通常结合ORM框架技术实现数据库访问。ORM框架与SQL语句操作数据库不同,它不要求开发人员使用SQL语句,而是以面向对象编码方式访问数据库。微软的企业级ORM框架称为“ADO.NET实体数据框架”(Entity Framework,简称EF)。它支持常见的SQL Server、Oracle等大型数据库。介绍了ORM技术以及在ASP.NET程序开发中使用EF创建数据模型的3种方式。EF可以将C#代码自动转成SQL语句,实现对数据库和表的操作。

关键词:ADO.NET;ORM;Entity Framework;数据建模

DOIDOI:10.11907/rjdk.151487

中图分类号:TP301

文献标识码:A 文章编号文章

编号:16727800(2015)008005502

0 引言

传统的软件项目中,对数据库的访问通常是将对数据库的操作通过sql语句封装成方法,再将这些方法给主程序调用。随着业务需求的变更和数据库的升级,每次都需要对方法中的sql语句进行修改,而且还需要针对不同的数据库,调整成对应的sql语法,这无疑加大了程序开发维护的难度和风险。在开发ASP.NET MVC大中型项目时,通常结合ORM框架技术实现数据库访问。ORM框架与SQL语句操作数据库不同,它不要求开发人员使用SQL语句,而是以面向对象编码方式访问数据库。微软的企业级ORM框架称为“ADO.NET实体数据框架”(Entity Framework,简称EF)。它支持常见的SQL Server、Oracle等大型数据库。EF可以将C#代码自动转成SQL语句,实现对数据库和表的操作。

1 ORM概述

大中型软件开发过程中常会使用到ORM技术,ORM全称是“对象-关系映射”(ObjectRelation Mapping)。 ORM是将关系数据库中的数据用对象的形式表现出来,并通过面向对象的方式将这些对象组织起来,实现系统业务逻辑的过程。ORM的具体含义为:O对应程序中的类,如Customer(顾客类);R为联系,对应数据库中的关系表;M表示程序中对象和数据库中关系表的映射关系。ORM技术避免了如下两个最常见的开发问题:

(1)操作数据库代码的重复性。在使用ORM之前通过ADO.NET访问数据库,或者将对数据库的操作提取到一个单独的“SqlHelper类”中,然后在数据访问层(DAL)调用“SqlHelper类”的方法,实现对数据库的操作。即使如此,在DAL仍然需要编写大量代码,而数据库的访问操作无非是增、删、改、查4种。仅仅因为操作的数据表结构不同,而不得不花费大量的时间重复编写针对各种数据表的操作代码,尤其是数据表数量达到百张时,数据库操作代码工作量非常巨大。ORM技术能实现自动生成这些操作代码,开发人员可以从繁琐的数据访问代码中解脱,把精力集中在业务逻辑的处理上。

(2)大量SQL语句影响程序的扩展性和灵活性。编写的程序和数据库之间的耦合性很紧密,如果操作的是SQL Server数据库,必须在DAL引入SQLServer的类库(SqlConnection等)。如果程序需要更换为Oracle数据库,则DAL需要更新引用Oracle类库,所有的操作代码和SQL语句必须全部重写(因为每种数据库的SQL语法是不同的)。ORM解决了这种问题,使得只需编写一次代码,便可适用于多种数据库。

ORM中经常使用到“业务实体”概念。业务实体在数据库中表现为关系数据,而在内存中表现为对象。应用程序擅长处理对象,但是很难处理关系数据。ORM通过关系数据和对象数据之间的映射,自动产生SQL语句。

ASP.NET MVC应用程序推荐使用的ORM框架为Entity Framework(简称EF),是微软开发的基于ADO.NET的ORM框架,主要特点是:支持多种数据库;映射引擎支持存储过程;提供Visual Studio集成工具,执行可视化操作。

2 EF支持的三种数据创建模式

在控制器和模型的关系中,控制器总是居于“主动”角色。控制器负责调用模型所定义的各种类,而模型提供“数据访问服务”、 “数据验证服务”等功能,所以“数据建模”是模型的首要任务。EF支持Code First、Model First、Database First 3种方式的数据建模。

图1 EF支持的3种数据建模方式

2.1 Database First模式

“Database First”称为“数据库优先”,即先创建数据库,后生成数据模型。该模式的使用前提是数据库已经存在并正常工作,然后使用VisualStudio EF模型设计器,根据数据库生成数据模型。使用EF模型设计器可以随时修改数据模型并更新数据库。

2.2 Model First模式

“Model First”称为“模型优先”,这种方式是先利用某些工具(如VS的EF设计器)设计出实体数据模型及它们之间的关系,再根据这些实体、关系来生成数据库对象及相关代码文件。

2.3 Code First模式

“Code First”称为“代码优先”,这种方式需要先写一些代码,如实体对象,数据关系等,然后根据已有的代码描述,自动创建数据对象,这种方法与Model First非常类似。自己写代码,其实就是用代码表示实体模型,而Model First则是用可视化的方式描述了实体模型。

3 数据模型创建

Visual StudioEF模型设计器为数据库创建了模型并在Models目录生成.edmx文件,.edmx 文件是一个 XML 文件,它用于定义概念模型、存储模型和这些模型之间的映射。 .edmx 文件还包含 ADO.NET 实体数据模型设计器(实体设计器),用于以图形方式呈现模型的信息。.edmx文件就是实体数据模型,使用EF模型设计器修改模型时,会更改 .edmx 文件。默认情况下,.edmx 文件使用EF模型设计器打开,也可以按照下列步骤使用 XML 编辑器打开.edmx 文件: ①确保项目在 Visual Studio 中打开;②在“解决方案资源管理器”中右击 .edmx 文件,然后选择“打开方式...”;③选择“XML 编辑器”,然后单击“确定”。

使用.edmx文件创建数据模型涉及的相关概念如下:①SSDL:存储模型,指数据库中的实体(将各个实体的关系固定到表中的形式);②CSDL:概念模型。以程序语言的角度来定义模型。即其中定义的实体、主键、属性、关联等都是对应于.NET Framework中的类型;③映射:将概念模型和存储模型连接起来,以便执行操作,即实体·属性(概念模型)对应实体·字段(存储模型)。

使用EF为“Meixin”数据库建立数据模型。“Meixin”数据库根据真实的“在线点餐”系统的用户需求设计,体现了核心的在线点餐业务数据结构,如表1所示。

数据建模操作步骤如下:①创建ASP.NET MVC应用程序后,按下“Shift+Ctrl+A”快捷键,打开“添加新项”对话框,选择“数据”,并选择“ADO.NET 实体数据模型”,打开EF向导;②点击“添加”按钮,在 “实体数据模型向导”对话框,选择“从数据库生成”;③点击“下一步”,在 “实体数据模型向导”对话框,创建数据库连接,连接到“Meixin”数据库,EF向导自动生成连接串;④将连接串保存到Web.Config,点击“下一步”,选择数据表“u_user”;⑤点击“完成”,Visual Studio创建出数据模型关系图;⑥EF向导自动生成的meixinEntities类,称为“数据库上下文操作类”,位于/Models/Model1.Context.cs。同时生成的m_user类,称为“业务实体类”,位于/Models/m_user.cs。

4 结语

研究表明,在ASP.NET程序设计开发过程中,使用EF创建数据模型,并通过面向对象的方法来实现对数据库的增删改查等操作,对减少代码重复性,增加程序扩展性和灵活性具有积极影响。随着移动应用平台和云端数据库的逐渐普及,选择一款合适的数据建模方式能极大提高开发效率,并增加程序的扩展性和灵活性,达到事半功倍的效果。

参考文献:

[1] TOM FITZMACKEN.Getting started with entity framework 6 database first using MVC 5[EB/OL]. https://www.asp.net/mvc/overview/gettingstarted/databasefirstdevelopment/settingupdatabase.

[2] TOM DYKSTRA.Creating an entity framework data model for an ASP.NET MVC application (1 of 10) [EB/OL].http://www.asp.net/mvc/overview/olderversions/gettingstartedwithef5usingmvc4/creatinganentityframeworkdatamodelforanaspnetmvcapplication.

[3] THOMAS M CONNOLLY,CAROLYN E BEGG.Database systems: a practical approach to design,implementation and management[M].AddisonWesley,2009.

[4] BEZNOSOV K.Design and implementation of a componentbased protection architecture for ASP.NET web services[C].Berlin: Proceedings of ComponentBased Software Engineering,2005.

[5] TOBY J TEOREY,STEPHEN BUXTON,LOWELL FRYMAN,et al.Database design: know it all[M].Morgan Kaufmann Publishers,2009.

(责任编辑:孙 娟)