林佳一

摘 要: 面對日益龐大且復雜的應用系統,傳統的數據訪問技術存在開發效率低、安全性弱和兼容性差等問題。為了進一步快速構建一個功能強大的系統,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
3.3 ef關鍵代碼分析
UI層接收到用戶請求,UI層調用BLL層的方法進行處理,其中需要操作數據庫的部分是由BLL層調用DAL層的方法完成。整個系統中最重要和最低層的代碼在DAL層。DAL層中把每個實體類相關的增加、刪除、修改和查詢的方法封裝在各自的類中。由于這些操作方法中間的邏輯代碼基本一致,只是處理的實體對象不同,因此,在DAL層抽象出一個DBDal泛型類,這個類的功能和基于ADO.NET三層系統中的SQLHelper通用數據操作類的功能相似,主要包括對基本增加、刪除、修改和查詢方法,此時方法并沒有確定針對哪個具體實體對象,DBDal泛型類部分代碼如下所示。
public class DBDal
{
jxcEntities db=new jxcEntities();
DbSet
//條件查詢
public IQueryable
{
return ds.Where(conditon);
}
//增加
public void Add(TEntity entity)
{
ds.Add(entity);
db.SaveChanges();
}
…
}
當對某個實體類操作時,需要定義一個子類繼承DBDal泛型類。比如對應銷售表的sell實體類操作的類為GoodsDAL: DBDal
3.4 注意的問題
雖然使用EF減輕了編程的工作量,且降低了代碼出錯率,但在應用過程中有一些問題值得注意。第一,程序員往往需要修改從數據庫自動生成的實體類,此時不要在.cs文件中修改,而要修改tt模板,因為只要保存edmx文件,.cs文件就會回到未修改狀態;第二,EF模型在DAL層實現時,數據庫的連接字符等配置保存在App.config文件中,而應用程序首先啟動是UI層項目,因此要將
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.