EF技术在进销存管理系统的应用研究

2018-05-02 03:25林佳一
计算机时代 2018年3期

林佳一

摘 要: 面对日益庞大且复杂的应用系统,传统的数据访问技术存在开发效率低、安全性弱和兼容性差等问题。为了进一步快速构建一个功能强大的系统,Entity Framework数据模型这一新技术应运而生,该技术基于ORM框架,融合了面向对象的思维方式。将EF技术应用在三层架构的进销存管理系统,程序员可不再拘泥于SQL语句细节,而是重点关注程序逻辑的实现。EF技术的使用大大缩短了开发周期,有助于更有效地使用数据。

关键词: Entity Framework; ORM; 三层架构; SQL

中图分类号:TP311 文献标志码:A 文章编号:1006-8228(2018)03-38-04

Research on the application of EF technology in inventory management system

Lin Jiayi

(GuangDong Communication Polytechnic, Guangzhou, Guangdong 510650, China)

Abstract: Facing the increasingly large and complex application system,traditional data access technology has many problems, such as low development efficiency, weak security and poor compatibility. In order to further build a powerful system quickly, the new technology of Entity Framework data model came into being. This technology is based on the ORM framework, and integrates the object-oriented way of thinking. The application of EF technology in a three-tier architecture of inventory management system, the programmers can no longer get bogged down in the details of SQL statements, but rather focus on the realization of program logic. The application of EF technology greatly shortens the development cycle and helps to use data more effectively.

Key words: Entity Framework; ORM; three-tier architecture; SQL

0 引言

随着大数据时代的到来,人们普遍关注如何应用信息化的手段高效地管理和使用数据。无论单位规模大小,都建有独立的信息系统来管理自己重要的数据。在实现这些系统的过程中,数据的访问技术直接决定着系统使用数据的质量和效率。尽管在设计思想上,从二层结构、三层结构到N层结构的分层开发模式对提高系统的开发速度效果明显,但在数据访问方面还有进一步提升的空间。

业界需要一种数据访问技术,它对用户而言希望快速有效获取数据,对开发者而言希望容易掌握。EF技术的出现为满足这些要求提供了一种新的方案。EF技术是由传统的数据访问技术发展而来,是ORM框架的具体实现,解决了关系表到实体类的转换问题,使程序员从面向对象的角度上操作数据库。本文通过分析EF技术原理,结合三层架构开发模式,探讨了在进销存管理系统中应用EF技术的方法。

1 相关技术概述

1.1 ORM框架

较长一段时间内,应用系统的程序设计使用的是面向对象技术,而数据库的设计依然沿用的是面向集合关系模型,因此在开发中程序员需要将关系模型转换为对象实体以便代码访问,这大大加重了程序员的工作负担。为了让程序员专注于业务代码,ORM框架应运而生。ORM(Object Relation Mapping)全称为对象关系映射。O指编程语言中相应的类,R指关系数据库中的二维表,M是指关系和对象之间的映射[1]。通过这种映射,ORM框架将关系数据库中的数据表用类的形式表现出来,这样程序员只需要通过操作类来操作数据库而无须再写复杂的SQL语句。

1.2 EF数据模型

实体框架(Entity Framework)简称为EF,是微软针对其.NET平台推出的一种基于ORM技术的具体实现方案。自从在Visual Studio 2010中首次使用以来,历经多年完善,如今已经成为开发数据库应用程序的相对成熟技术。

EF技术的核心是实体数据模型(Entity Data Model)简称为EDM,它由三部分组成,概念层、映射层和存储层[2]。概念层是抽象的,指应用程序涉及的实体类和关系;存储层是具体的实现,指数据库中的表;映射层主要完成數据表和实体对象之间转换,这种映射是双向的,它能将数据表转换成.NET实体对象,也可以将.NET实体对象转换成数据表。在Visual Studio的项目中使用EF数据模型时,EDM具体的实现形式是一个后缀名为edmx的文件。这是一个用xml的格式描述元数据的文件,其中有三个重要的节点分别描述了概念层、映射层和存储层。它不仅设置了概念层模型和存储层模型的基本结构,还配置好了两者之间的全部映射关系。

EF提供了三种用户端来访问EDM,分别是Entity Client、Object Context和LINQ to Entities。无论是哪种用户端,EDM 中的数据提供者在数据源和用户端之间传递着数据,整个访问过程本质上都会转换为SQL语句,SQL语句中所操作的表和字段都来自于对.edmx元数据文件的解析结果,而最后的操作都会交给ADO.NET完成。因此可以认为EF是在ADO.NET的基础上对数据的操作细节所做的进一步封装。

根据不同的系统开发场景,使用EF技术时有三种开发方式[3],如图1所示。第一种方式:模型优先(Model First),首先需要在Visual Studio中创建实体类模型,然后按照EDM中的映射规则,系统自动生成数据库的表和相关脚本。这种方式适用的情况是开发时还未建好数据库,或者在开发过程中需要频繁通过修改实体类模型来更新数据库;第二种方式是数据库优先(DataBase First),先创建数据库,再将数据表转换为实体类模型,并编写代码来访问将数据表。此方式从搭建数据库起步,符合传统的系统开发思维,开发者容易掌握;第三种方式是代码优先(Code First),开发者先写实体类代码,通过创建类的对象,自动将对应的表生成到数据库中,并可以通过数据库自动生成实体类模型。该方式比较适合精通面向对象编程而不熟悉数据库语句的开发者,或者数据库规模较小。

1.3 三层架构

大部分数据库应用系统代码中都包括界面设计程序、逻辑判断程序和数据访问程序。如果这些代码全部混杂在一起,当数据库系统或用户界面发生改变时,则需要重新开发整个系统。为了方便系统的修改和重构,无论是部署在C/S(Client/Server)还是B/S(Browser/Server)之上的软件项目,都广泛应用了三层架构开发模式。

三层分别指UI层(表示层)、BLL层(业务逻辑层)和DAL层(数据访问层)[4]。UI层位于最上层,主要是界面的设计;BLL层在UI层和DAL层之间,负责数据处理和传递;DAL层功能主要是负责数据库的访问。三层各司其职、相互合作完成系统功能。三层之间传递数据显然不能直接是数据表,而是面向对象程序设计语言中的实体类表示,于是,需要将表中的数据转换成一个实体类的对象的集合。

2 在系统中使用EF技术的原因

目前,在基于.NET平台上的WinForm、Asp.Net、Asp.Net MVC、WCF等各种应用程序中都广泛采用了EF技术。EF技术之所以备受关注并成为数据访问领域的主流,主要原因如下:

⑴ 能与多种数据库管理系统无缝整合,有利于系统的更新和扩展

EF作为一个轻量级的数据访问框架不仅应用于SQL Server数据库,还可以支持Oracle、MySQL和 SQLite等各种的数据库。虽然这些数据库的SQL语句存在一定的差异,但对于使用了EF技术的应用程序而言,通过EDM的映射,在访问数据库的操作中屏蔽了这些不一致,这样使得更换数据库系统变得更加灵活。

⑵ EF技术与三层架构中的实体类相互融合,减少了数据传递的代码量

在三层架构的应用程序中,三层之间通过实体类来传递数据,实体类的一个对象对应二维表里的一行数据,实体类的每个属性对应表中的相应字段。EF中所用到的实体模型和关系数据库表是一一对应,相互之间形成映射。

⑶ 符合面向对象的思维方式,易于程序员学习和使用

EF技术让程序员直接用面向对象的编程方式来操作数据,而不必拘泥于低层访问数据库代码的细节。EF语法结合了LINQ代码或lambda表达式,因此代码非常简洁,开发人员容易掌握。这些高度封装的代码最终由系统自动转换为SQL语句。比如,对那些涉及多个表的操作,在EF中不用象在数据库中那样做联表,而直接用导航属性。EF中edmx元数据文件会读取数据库中的关系,然后根据表的主外键关系生成导航属性。

⑷ 避免直接使用SQL语句,可以提高系统的安全性

EF技术除了用.NET支持的语言完成有关数据库的增加、删除、修改和查询操作,还能很好地支持存储过程,有效地防止SQL注入式攻击,大大提高了应用程序的安全性。

3 EF技术在进销存管理系统的应用

随着系统规模越来越庞大,功能越来越复杂,软件项目开发需要很多人分工合作,三层架构在系统开发中日益凸显着重要作用。同时,针对三层架构中的每一层的实现各自也有很多的方案,尤其是对DAL层,

.NET平台的实现方法诸如ADO.NET,LINQ和EF等。EF作为微软当前最新数据存取技术,将其运用在项目中可以极大地发挥三层架构和EF各自的优势。下面以进销存管理系统为例,具体介绍EF技术在三层架构系统中的应用。该系统使用Visual Studio 2012和SQL Server2012,采用了数据库优先的开发方式。

3.1 系统设计

⑴ 功能分析

该进销存管理系统基于C/S体系结构,用于小型商业企业日常经营业务[5]。主要包括六大功能模块。①用户管理,分为系统用户和普通用户;②基本信息管理,包括商品、供应商、客户和仓库信息的录入、修改、删除和查询;③进货管理,入库单信息编辑;④销售管理,销售单信息的编辑;⑤库存信息的管理,库存的查询和统计、库存上下限预警;⑥决策分析,产品的销量和库存排行与分析。

⑵ 搭建系统三层架构

按照分層的思想,在VS中构建系统的三层架构。首先新建“JXC”空白解决方案,在方案中添加“JXC”WIN窗体应用程序项目、“JXCBLL”和“JXCDAL”类库项目,它们分别表示UI层、BLL层和DAL层。三层之间传递的数据放在实体类组成的“MODEL”实体层中。UI层直接和用户打交道,主要实现显示系统的主菜单、销售信息编辑等核心功能界面及界面之间的跳转。BLL层原本是实现诸如登录、销售统计等业务的复杂逻辑,但这里只是通过对DAL层的方法调用来实现任务,仅起到传递和响应请求的作用。DAL层中实现了处理的各个实体类的方法。

3.2 实现EF数据访问

⑴ 创建EF实体数据模型

在“MODEL”实体层项目中添加一个ADO.NET实体数据模型项,由于已经有“jxc”数据库,选择“从数据库生成”的方式,系统自动创建了jxc.edmx文件。jxc.edmx元数据文件保存了“jxc”数据库、实体类和映射关系的相关信息。与以前ADO.NET三层架构系统不同,EF会自动产生与数据库中各个表所对应的实体类。同时,还创建了数据库上下文类文件jxc.Context.cs,该文件中有一个jxcEntities类,对应于要访问“jxc”数据库,该类中为每个实体类定义了一个相关的实例属性,属性的类型是DbSet

⑵ DAL层使用EF实体数据模型

通常实体类会被系统的各层使用。在EF中通过jxcEntities对象的属性来访问要操作的表,如果要操作sell表就要操作对应的sell属性。数据的访问操作代码都封装在DAL层,而此时EF自动产生的类在实体层,于是需要将实体层使用的EntityFramework程序集引入到DAL层,这样才能在DAL层使用DbSet的各种方法,同时由EF自动转换成SQL代码完成对数据库的操作。

3.3 ef关键代码分析

UI层接收到用户请求,UI层调用BLL层的方法进行处理,其中需要操作数据库的部分是由BLL层调用DAL层的方法完成。整个系统中最重要和最低层的代碼在DAL层。DAL层中把每个实体类相关的增加、删除、修改和查询的方法封装在各自的类中。由于这些操作方法中间的逻辑代码基本一致,只是处理的实体对象不同,因此,在DAL层抽象出一个DBDal泛型类,这个类的功能和基于ADO.NET三层系统中的SQLHelper通用数据操作类的功能相似,主要包括对基本增加、删除、修改和查询方法,此时方法并没有确定针对哪个具体实体对象,DBDal泛型类部分代码如下所示。

public class DBDal where TEntity:class

{

jxcEntities db=new jxcEntities();

DbSet ds=db.Set();

//条件查询

public IQueryable Find(Expression> conditon)

{

return ds.Where(conditon);

}

//增加

public void Add(TEntity entity)

{

ds.Add(entity);

db.SaveChanges();

}

}

当对某个实体类操作时,需要定义一个子类继承DBDal泛型类。比如对应销售表的sell实体类操作的类为GoodsDAL: DBDal 。此时,不需要再在GoodsDAL类中定义基本操作方法,因为直接可以从父类DBDal中继承获得。在继承DBDal 时确定了泛型类型,意味着方法操作的是sell实体类对象,经过EF的模型映射后转换为用SQL语句操作数据库中的sell表。

3.4 注意的问题

虽然使用EF减轻了编程的工作量,且降低了代码出错率,但在应用过程中有一些问题值得注意。第一,程序员往往需要修改从数据库自动生成的实体类,此时不要在.cs文件中修改,而要修改tt模板,因为只要保存edmx文件,.cs文件就会回到未修改状态;第二,EF模型在DAL层实现时,数据库的连接字符等配置保存在App.config文件中,而应用程序首先启动是UI层项目,因此要将三个节点拷贝到UI层项目的App.config文件中;第三,EF访问数据库的实质是调用了IQueryable中的扩展方法,自动将这些方法转换成SQL语句,EF程序易写但执行效率较差,可以先在EF上下文中完成操作,再保存到数据库,以获得更优的性能。

4 结束语

在基于三层架构的进销存管理系统中,使用EF技术,使得程序结构更加清晰,不仅节省了项目的开发成本,而且缩短了开发周期。在当前信息化时代背景下,EF技术将会广泛应用于系统开发中。但是EF技术也存在一些不足之处, EF的模式化编程方式往往束缚了它解决特殊问题的能力,当面对复杂的业务逻辑时,开发者最终还是得使用SQL语句来实现功能。另外,还会出现系统运行速度较慢和无法保证数据的有效性等问题。因此,今后EF技术在性能优化、事务处理和安全性方面还有待进一步完善。

参考文献(References):

[1] 高起跃.基于ASP_NETMVC和实体框架的农业论坛的设计

与实现[D].辽宁科技大学硕士学位论文,2014.6.

[2] 谢日星.EntityFramework技术在分层架构中的应用研究[J].

电脑知识与技术,2011.7(14):3326-3327

[3] 龚兰兰.基于ASP.net MVC的智能名片后台系统的设计与

实现[J].苏州市职业大学学报,2017.28(1):5-9

[4] 何福南,汤晓燕.C#程序设计项目化教程[M].电子工业出版

社,2014.

[5] 明日科技.C#项目开发案例全程实录(第2版)[M].清华大学

出版社,2011.