国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

EF技術在進銷存管理系統(tǒng)的應用研究

2018-05-02 03:25林佳一
計算機時代 2018年3期

林佳一

摘 要: 面對日益龐大且復雜的應用系統(tǒng),傳統(tǒng)的數(shù)據(jù)訪問技術存在開發(fā)效率低、安全性弱和兼容性差等問題。為了進一步快速構(gòu)建一個功能強大的系統(tǒng),Entity Framework數(shù)據(jù)模型這一新技術應運而生,該技術基于ORM框架,融合了面向?qū)ο蟮乃季S方式。將EF技術應用在三層架構(gòu)的進銷存管理系統(tǒng),程序員可不再拘泥于SQL語句細節(jié),而是重點關注程序邏輯的實現(xiàn)。EF技術的使用大大縮短了開發(fā)周期,有助于更有效地使用數(shù)據(jù)。

關鍵詞: Entity Framework; ORM; 三層架構(gòu); 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 引言

隨著大數(shù)據(jù)時代的到來,人們普遍關注如何應用信息化的手段高效地管理和使用數(shù)據(jù)。無論單位規(guī)模大小,都建有獨立的信息系統(tǒng)來管理自己重要的數(shù)據(jù)。在實現(xiàn)這些系統(tǒng)的過程中,數(shù)據(jù)的訪問技術直接決定著系統(tǒng)使用數(shù)據(jù)的質(zhì)量和效率。盡管在設計思想上,從二層結(jié)構(gòu)、三層結(jié)構(gòu)到N層結(jié)構(gòu)的分層開發(fā)模式對提高系統(tǒng)的開發(fā)速度效果明顯,但在數(shù)據(jù)訪問方面還有進一步提升的空間。

業(yè)界需要一種數(shù)據(jù)訪問技術,它對用戶而言希望快速有效獲取數(shù)據(jù),對開發(fā)者而言希望容易掌握。EF技術的出現(xiàn)為滿足這些要求提供了一種新的方案。EF技術是由傳統(tǒng)的數(shù)據(jù)訪問技術發(fā)展而來,是ORM框架的具體實現(xiàn),解決了關系表到實體類的轉(zhuǎn)換問題,使程序員從面向?qū)ο蟮慕嵌壬喜僮鲾?shù)據(jù)庫。本文通過分析EF技術原理,結(jié)合三層架構(gòu)開發(fā)模式,探討了在進銷存管理系統(tǒng)中應用EF技術的方法。

1 相關技術概述

1.1 ORM框架

較長一段時間內(nèi),應用系統(tǒng)的程序設計使用的是面向?qū)ο蠹夹g,而數(shù)據(jù)庫的設計依然沿用的是面向集合關系模型,因此在開發(fā)中程序員需要將關系模型轉(zhuǎn)換為對象實體以便代碼訪問,這大大加重了程序員的工作負擔。為了讓程序員專注于業(yè)務代碼,ORM框架應運而生。ORM(Object Relation Mapping)全稱為對象關系映射。O指編程語言中相應的類,R指關系數(shù)據(jù)庫中的二維表,M是指關系和對象之間的映射[1]。通過這種映射,ORM框架將關系數(shù)據(jù)庫中的數(shù)據(jù)表用類的形式表現(xiàn)出來,這樣程序員只需要通過操作類來操作數(shù)據(jù)庫而無須再寫復雜的SQL語句。

1.2 EF數(shù)據(jù)模型

實體框架(Entity Framework)簡稱為EF,是微軟針對其.NET平臺推出的一種基于ORM技術的具體實現(xiàn)方案。自從在Visual Studio 2010中首次使用以來,歷經(jīng)多年完善,如今已經(jīng)成為開發(fā)數(shù)據(jù)庫應用程序的相對成熟技術。

EF技術的核心是實體數(shù)據(jù)模型(Entity Data Model)簡稱為EDM,它由三部分組成,概念層、映射層和存儲層[2]。概念層是抽象的,指應用程序涉及的實體類和關系;存儲層是具體的實現(xiàn),指數(shù)據(jù)庫中的表;映射層主要完成數(shù)據(jù)表和實體對象之間轉(zhuǎn)換,這種映射是雙向的,它能將數(shù)據(jù)表轉(zhuǎn)換成.NET實體對象,也可以將.NET實體對象轉(zhuǎn)換成數(shù)據(jù)表。在Visual Studio的項目中使用EF數(shù)據(jù)模型時,EDM具體的實現(xiàn)形式是一個后綴名為edmx的文件。這是一個用xml的格式描述元數(shù)據(jù)的文件,其中有三個重要的節(jié)點、分別描述了概念層、映射層和存儲層。它不僅設置了概念層模型和存儲層模型的基本結(jié)構(gòu),還配置好了兩者之間的全部映射關系。

EF提供了三種用戶端來訪問EDM,分別是Entity Client、Object Context和LINQ to Entities。無論是哪種用戶端,EDM 中的數(shù)據(jù)提供者在數(shù)據(jù)源和用戶端之間傳遞著數(shù)據(jù),整個訪問過程本質(zhì)上都會轉(zhuǎn)換為SQL語句,SQL語句中所操作的表和字段都來自于對.edmx元數(shù)據(jù)文件的解析結(jié)果,而最后的操作都會交給ADO.NET完成。因此可以認為EF是在ADO.NET的基礎上對數(shù)據(jù)的操作細節(jié)所做的進一步封裝。

根據(jù)不同的系統(tǒng)開發(fā)場景,使用EF技術時有三種開發(fā)方式[3],如圖1所示。第一種方式:模型優(yōu)先(Model First),首先需要在Visual Studio中創(chuàng)建實體類模型,然后按照EDM中的映射規(guī)則,系統(tǒng)自動生成數(shù)據(jù)庫的表和相關腳本。這種方式適用的情況是開發(fā)時還未建好數(shù)據(jù)庫,或者在開發(fā)過程中需要頻繁通過修改實體類模型來更新數(shù)據(jù)庫;第二種方式是數(shù)據(jù)庫優(yōu)先(DataBase First),先創(chuàng)建數(shù)據(jù)庫,再將數(shù)據(jù)表轉(zhuǎn)換為實體類模型,并編寫代碼來訪問將數(shù)據(jù)表。此方式從搭建數(shù)據(jù)庫起步,符合傳統(tǒng)的系統(tǒng)開發(fā)思維,開發(fā)者容易掌握;第三種方式是代碼優(yōu)先(Code First),開發(fā)者先寫實體類代碼,通過創(chuàng)建類的對象,自動將對應的表生成到數(shù)據(jù)庫中,并可以通過數(shù)據(jù)庫自動生成實體類模型。該方式比較適合精通面向?qū)ο缶幊潭皇煜?shù)據(jù)庫語句的開發(fā)者,或者數(shù)據(jù)庫規(guī)模較小。

1.3 三層架構(gòu)

大部分數(shù)據(jù)庫應用系統(tǒng)代碼中都包括界面設計程序、邏輯判斷程序和數(shù)據(jù)訪問程序。如果這些代碼全部混雜在一起,當數(shù)據(jù)庫系統(tǒng)或用戶界面發(fā)生改變時,則需要重新開發(fā)整個系統(tǒng)。為了方便系統(tǒng)的修改和重構(gòu),無論是部署在C/S(Client/Server)還是B/S(Browser/Server)之上的軟件項目,都廣泛應用了三層架構(gòu)開發(fā)模式。

三層分別指UI層(表示層)、BLL層(業(yè)務邏輯層)和DAL層(數(shù)據(jù)訪問層)[4]。UI層位于最上層,主要是界面的設計;BLL層在UI層和DAL層之間,負責數(shù)據(jù)處理和傳遞;DAL層功能主要是負責數(shù)據(jù)庫的訪問。三層各司其職、相互合作完成系統(tǒng)功能。三層之間傳遞數(shù)據(jù)顯然不能直接是數(shù)據(jù)表,而是面向?qū)ο蟪绦蛟O計語言中的實體類表示,于是,需要將表中的數(shù)據(jù)轉(zhuǎn)換成一個實體類的對象的集合。

2 在系統(tǒng)中使用EF技術的原因

目前,在基于.NET平臺上的WinForm、Asp.Net、Asp.Net MVC、WCF等各種應用程序中都廣泛采用了EF技術。EF技術之所以備受關注并成為數(shù)據(jù)訪問領域的主流,主要原因如下:

⑴ 能與多種數(shù)據(jù)庫管理系統(tǒng)無縫整合,有利于系統(tǒng)的更新和擴展

EF作為一個輕量級的數(shù)據(jù)訪問框架不僅應用于SQL Server數(shù)據(jù)庫,還可以支持Oracle、MySQL和 SQLite等各種的數(shù)據(jù)庫。雖然這些數(shù)據(jù)庫的SQL語句存在一定的差異,但對于使用了EF技術的應用程序而言,通過EDM的映射,在訪問數(shù)據(jù)庫的操作中屏蔽了這些不一致,這樣使得更換數(shù)據(jù)庫系統(tǒng)變得更加靈活。

⑵ EF技術與三層架構(gòu)中的實體類相互融合,減少了數(shù)據(jù)傳遞的代碼量

在三層架構(gòu)的應用程序中,三層之間通過實體類來傳遞數(shù)據(jù),實體類的一個對象對應二維表里的一行數(shù)據(jù),實體類的每個屬性對應表中的相應字段。EF中所用到的實體模型和關系數(shù)據(jù)庫表是一一對應,相互之間形成映射。

⑶ 符合面向?qū)ο蟮乃季S方式,易于程序員學習和使用

EF技術讓程序員直接用面向?qū)ο蟮木幊谭绞絹聿僮鲾?shù)據(jù),而不必拘泥于低層訪問數(shù)據(jù)庫代碼的細節(jié)。EF語法結(jié)合了LINQ代碼或lambda表達式,因此代碼非常簡潔,開發(fā)人員容易掌握。這些高度封裝的代碼最終由系統(tǒng)自動轉(zhuǎn)換為SQL語句。比如,對那些涉及多個表的操作,在EF中不用象在數(shù)據(jù)庫中那樣做聯(lián)表,而直接用導航屬性。EF中edmx元數(shù)據(jù)文件會讀取數(shù)據(jù)庫中的關系,然后根據(jù)表的主外鍵關系生成導航屬性。

⑷ 避免直接使用SQL語句,可以提高系統(tǒng)的安全性

EF技術除了用.NET支持的語言完成有關數(shù)據(jù)庫的增加、刪除、修改和查詢操作,還能很好地支持存儲過程,有效地防止SQL注入式攻擊,大大提高了應用程序的安全性。

3 EF技術在進銷存管理系統(tǒng)的應用

隨著系統(tǒng)規(guī)模越來越龐大,功能越來越復雜,軟件項目開發(fā)需要很多人分工合作,三層架構(gòu)在系統(tǒng)開發(fā)中日益凸顯著重要作用。同時,針對三層架構(gòu)中的每一層的實現(xiàn)各自也有很多的方案,尤其是對DAL層,

.NET平臺的實現(xiàn)方法諸如ADO.NET,LINQ和EF等。EF作為微軟當前最新數(shù)據(jù)存取技術,將其運用在項目中可以極大地發(fā)揮三層架構(gòu)和EF各自的優(yōu)勢。下面以進銷存管理系統(tǒng)為例,具體介紹EF技術在三層架構(gòu)系統(tǒng)中的應用。該系統(tǒng)使用Visual Studio 2012和SQL Server2012,采用了數(shù)據(jù)庫優(yōu)先的開發(fā)方式。

3.1 系統(tǒng)設計

⑴ 功能分析

該進銷存管理系統(tǒng)基于C/S體系結(jié)構(gòu),用于小型商業(yè)企業(yè)日常經(jīng)營業(yè)務[5]。主要包括六大功能模塊。①用戶管理,分為系統(tǒng)用戶和普通用戶;②基本信息管理,包括商品、供應商、客戶和倉庫信息的錄入、修改、刪除和查詢;③進貨管理,入庫單信息編輯;④銷售管理,銷售單信息的編輯;⑤庫存信息的管理,庫存的查詢和統(tǒng)計、庫存上下限預警;⑥決策分析,產(chǎn)品的銷量和庫存排行與分析。

⑵ 搭建系統(tǒng)三層架構(gòu)

按照分層的思想,在VS中構(gòu)建系統(tǒng)的三層架構(gòu)。首先新建“JXC”空白解決方案,在方案中添加“JXC”WIN窗體應用程序項目、“JXCBLL”和“JXCDAL”類庫項目,它們分別表示UI層、BLL層和DAL層。三層之間傳遞的數(shù)據(jù)放在實體類組成的“MODEL”實體層中。UI層直接和用戶打交道,主要實現(xiàn)顯示系統(tǒng)的主菜單、銷售信息編輯等核心功能界面及界面之間的跳轉(zhuǎn)。BLL層原本是實現(xiàn)諸如登錄、銷售統(tǒng)計等業(yè)務的復雜邏輯,但這里只是通過對DAL層的方法調(diào)用來實現(xiàn)任務,僅起到傳遞和響應請求的作用。DAL層中實現(xiàn)了處理的各個實體類的方法。

3.2 實現(xiàn)EF數(shù)據(jù)訪問

⑴ 創(chuàng)建EF實體數(shù)據(jù)模型

在“MODEL”實體層項目中添加一個ADO.NET實體數(shù)據(jù)模型項,由于已經(jīng)有“jxc”數(shù)據(jù)庫,選擇“從數(shù)據(jù)庫生成”的方式,系統(tǒng)自動創(chuàng)建了jxc.edmx文件。jxc.edmx元數(shù)據(jù)文件保存了“jxc”數(shù)據(jù)庫、實體類和映射關系的相關信息。與以前ADO.NET三層架構(gòu)系統(tǒng)不同,EF會自動產(chǎn)生與數(shù)據(jù)庫中各個表所對應的實體類。同時,還創(chuàng)建了數(shù)據(jù)庫上下文類文件jxc.Context.cs,該文件中有一個jxcEntities類,對應于要訪問“jxc”數(shù)據(jù)庫,該類中為每個實體類定義了一個相關的實例屬性,屬性的類型是DbSet

⑵ DAL層使用EF實體數(shù)據(jù)模型

通常實體類會被系統(tǒng)的各層使用。在EF中通過jxcEntities對象的屬性來訪問要操作的表,如果要操作sell表就要操作對應的sell屬性。數(shù)據(jù)的訪問操作代碼都封裝在DAL層,而此時EF自動產(chǎn)生的類在實體層,于是需要將實體層使用的EntityFramework程序集引入到DAL層,這樣才能在DAL層使用DbSet的各種方法,同時由EF自動轉(zhuǎn)換成SQL代碼完成對數(shù)據(jù)庫的操作。

3.3 ef關鍵代碼分析

UI層接收到用戶請求,UI層調(diào)用BLL層的方法進行處理,其中需要操作數(shù)據(jù)庫的部分是由BLL層調(diào)用DAL層的方法完成。整個系統(tǒng)中最重要和最低層的代碼在DAL層。DAL層中把每個實體類相關的增加、刪除、修改和查詢的方法封裝在各自的類中。由于這些操作方法中間的邏輯代碼基本一致,只是處理的實體對象不同,因此,在DAL層抽象出一個DBDal泛型類,這個類的功能和基于ADO.NET三層系統(tǒng)中的SQLHelper通用數(shù)據(jù)操作類的功能相似,主要包括對基本增加、刪除、修改和查詢方法,此時方法并沒有確定針對哪個具體實體對象,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實體類對象,經(jīng)過EF的模型映射后轉(zhuǎn)換為用SQL語句操作數(shù)據(jù)庫中的sell表。

3.4 注意的問題

雖然使用EF減輕了編程的工作量,且降低了代碼出錯率,但在應用過程中有一些問題值得注意。第一,程序員往往需要修改從數(shù)據(jù)庫自動生成的實體類,此時不要在.cs文件中修改,而要修改tt模板,因為只要保存edmx文件,.cs文件就會回到未修改狀態(tài);第二,EF模型在DAL層實現(xiàn)時,數(shù)據(jù)庫的連接字符等配置保存在App.config文件中,而應用程序首先啟動是UI層項目,因此要將三個節(jié)點拷貝到UI層項目的App.config文件中;第三,EF訪問數(shù)據(jù)庫的實質(zhì)是調(diào)用了IQueryable中的擴展方法,自動將這些方法轉(zhuǎn)換成SQL語句,EF程序易寫但執(zhí)行效率較差,可以先在EF上下文中完成操作,再保存到數(shù)據(jù)庫,以獲得更優(yōu)的性能。

4 結(jié)束語

在基于三層架構(gòu)的進銷存管理系統(tǒng)中,使用EF技術,使得程序結(jié)構(gòu)更加清晰,不僅節(jié)省了項目的開發(fā)成本,而且縮短了開發(fā)周期。在當前信息化時代背景下,EF技術將會廣泛應用于系統(tǒng)開發(fā)中。但是EF技術也存在一些不足之處, EF的模式化編程方式往往束縛了它解決特殊問題的能力,當面對復雜的業(yè)務邏輯時,開發(fā)者最終還是得使用SQL語句來實現(xiàn)功能。另外,還會出現(xiàn)系統(tǒng)運行速度較慢和無法保證數(shù)據(jù)的有效性等問題。因此,今后EF技術在性能優(yōu)化、事務處理和安全性方面還有待進一步完善。

參考文獻(References):

[1] 高起躍.基于ASP_NETMVC和實體框架的農(nóng)業(yè)論壇的設計

與實現(xiàn)[D].遼寧科技大學碩士學位論文,2014.6.

[2] 謝日星.EntityFramework技術在分層架構(gòu)中的應用研究[J].

電腦知識與技術,2011.7(14):3326-3327

[3] 龔蘭蘭.基于ASP.net MVC的智能名片后臺系統(tǒng)的設計與

實現(xiàn)[J].蘇州市職業(yè)大學學報,2017.28(1):5-9

[4] 何福南,湯曉燕.C#程序設計項目化教程[M].電子工業(yè)出版

社,2014.

[5] 明日科技.C#項目開發(fā)案例全程實錄(第2版)[M].清華大學

出版社,2011.

兴义市| 密山市| 西林县| 新田县| 双桥区| 滁州市| 玉溪市| 乐清市| 绿春县| 宜春市| 灵丘县| 武城县| 定安县| 龙里县| 榆中县| 商都县| 怀远县| 丹寨县| 黄龙县| 三穗县| 灵宝市| 弥勒县| 东兴市| 沙洋县| 宿迁市| 青铜峡市| 建德市| 称多县| 民县| 疏附县| 炉霍县| 扶余县| 大埔县| 桃园县| 郑州市| 阿勒泰市| 凌源市| 本溪市| 沛县| 兰西县| 德阳市|