李知杰++趙健飛
摘要:在開發(fā)ASP.NET MVC大中型項目時,通常結合ORM框架技術實現數據庫訪問。ORM框架與SQL語句操作數據庫不同,它不要求開發(fā)人員使用SQL語句,而是以面向對象編碼方式訪問數據庫。微軟的企業(yè)級ORM框架稱為“ADO.NET實體數據框架”(Entity Framework,簡稱EF)。它支持常見的SQL Server、Oracle等大型數據庫。介紹了ORM技術以及在ASP.NET程序開發(fā)中使用EF創(chuàng)建數據模型的3種方式。EF可以將C#代碼自動轉成SQL語句,實現對數據庫和表的操作。
關鍵詞:ADO.NET;ORM;Entity Framework;數據建模
DOIDOI:10.11907/rjdk.151487
中圖分類號:TP301
文獻標識碼:A 文章編號文章
編號:16727800(2015)008005502
0 引言
傳統(tǒng)的軟件項目中,對數據庫的訪問通常是將對數據庫的操作通過sql語句封裝成方法,再將這些方法給主程序調用。隨著業(yè)務需求的變更和數據庫的升級,每次都需要對方法中的sql語句進行修改,而且還需要針對不同的數據庫,調整成對應的sql語法,這無疑加大了程序開發(fā)維護的難度和風險。在開發(fā)ASP.NET MVC大中型項目時,通常結合ORM框架技術實現數據庫訪問。ORM框架與SQL語句操作數據庫不同,它不要求開發(fā)人員使用SQL語句,而是以面向對象編碼方式訪問數據庫。微軟的企業(yè)級ORM框架稱為“ADO.NET實體數據框架”(Entity Framework,簡稱EF)。它支持常見的SQL Server、Oracle等大型數據庫。EF可以將C#代碼自動轉成SQL語句,實現對數據庫和表的操作。
1 ORM概述
大中型軟件開發(fā)過程中常會使用到ORM技術,ORM全稱是“對象-關系映射”(ObjectRelation Mapping)。 ORM是將關系數據庫中的數據用對象的形式表現出來,并通過面向對象的方式將這些對象組織起來,實現系統(tǒng)業(yè)務邏輯的過程。ORM的具體含義為:O對應程序中的類,如Customer(顧客類);R為聯系,對應數據庫中的關系表;M表示程序中對象和數據庫中關系表的映射關系。ORM技術避免了如下兩個最常見的開發(fā)問題:
(1)操作數據庫代碼的重復性。在使用ORM之前通過ADO.NET訪問數據庫,或者將對數據庫的操作提取到一個單獨的“SqlHelper類”中,然后在數據訪問層(DAL)調用“SqlHelper類”的方法,實現對數據庫的操作。即使如此,在DAL仍然需要編寫大量代碼,而數據庫的訪問操作無非是增、刪、改、查4種。僅僅因為操作的數據表結構不同,而不得不花費大量的時間重復編寫針對各種數據表的操作代碼,尤其是數據表數量達到百張時,數據庫操作代碼工作量非常巨大。ORM技術能實現自動生成這些操作代碼,開發(fā)人員可以從繁瑣的數據訪問代碼中解脫,把精力集中在業(yè)務邏輯的處理上。
(2)大量SQL語句影響程序的擴展性和靈活性。編寫的程序和數據庫之間的耦合性很緊密,如果操作的是SQL Server數據庫,必須在DAL引入SQLServer的類庫(SqlConnection等)。如果程序需要更換為Oracle數據庫,則DAL需要更新引用Oracle類庫,所有的操作代碼和SQL語句必須全部重寫(因為每種數據庫的SQL語法是不同的)。ORM解決了這種問題,使得只需編寫一次代碼,便可適用于多種數據庫。
ORM中經常使用到“業(yè)務實體”概念。業(yè)務實體在數據庫中表現為關系數據,而在內存中表現為對象。應用程序擅長處理對象,但是很難處理關系數據。ORM通過關系數據和對象數據之間的映射,自動產生SQL語句。
ASP.NET MVC應用程序推薦使用的ORM框架為Entity Framework(簡稱EF),是微軟開發(fā)的基于ADO.NET的ORM框架,主要特點是:支持多種數據庫;映射引擎支持存儲過程;提供Visual Studio集成工具,執(zhí)行可視化操作。
2 EF支持的三種數據創(chuàng)建模式
在控制器和模型的關系中,控制器總是居于“主動”角色??刂破髫撠熣{用模型所定義的各種類,而模型提供“數據訪問服務”、 “數據驗證服務”等功能,所以“數據建?!笔悄P偷氖滓蝿铡F支持Code First、Model First、Database First 3種方式的數據建模。
圖1 EF支持的3種數據建模方式
2.1 Database First模式
“Database First”稱為“數據庫優(yōu)先”,即先創(chuàng)建數據庫,后生成數據模型。該模式的使用前提是數據庫已經存在并正常工作,然后使用VisualStudio EF模型設計器,根據數據庫生成數據模型。使用EF模型設計器可以隨時修改數據模型并更新數據庫。
2.2 Model First模式
“Model First”稱為“模型優(yōu)先”,這種方式是先利用某些工具(如VS的EF設計器)設計出實體數據模型及它們之間的關系,再根據這些實體、關系來生成數據庫對象及相關代碼文件。
2.3 Code First模式
“Code First”稱為“代碼優(yōu)先”,這種方式需要先寫一些代碼,如實體對象,數據關系等,然后根據已有的代碼描述,自動創(chuàng)建數據對象,這種方法與Model First非常類似。自己寫代碼,其實就是用代碼表示實體模型,而Model First則是用可視化的方式描述了實體模型。
3 數據模型創(chuàng)建
Visual StudioEF模型設計器為數據庫創(chuàng)建了模型并在Models目錄生成.edmx文件,.edmx 文件是一個 XML 文件,它用于定義概念模型、存儲模型和這些模型之間的映射。 .edmx 文件還包含 ADO.NET 實體數據模型設計器(實體設計器),用于以圖形方式呈現模型的信息。.edmx文件就是實體數據模型,使用EF模型設計器修改模型時,會更改 .edmx 文件。默認情況下,.edmx 文件使用EF模型設計器打開,也可以按照下列步驟使用 XML 編輯器打開.edmx 文件: ①確保項目在 Visual Studio 中打開;②在“解決方案資源管理器”中右擊 .edmx 文件,然后選擇“打開方式...”;③選擇“XML 編輯器”,然后單擊“確定”。
使用.edmx文件創(chuàng)建數據模型涉及的相關概念如下:①SSDL:存儲模型,指數據庫中的實體(將各個實體的關系固定到表中的形式);②CSDL:概念模型。以程序語言的角度來定義模型。即其中定義的實體、主鍵、屬性、關聯等都是對應于.NET Framework中的類型;③映射:將概念模型和存儲模型連接起來,以便執(zhí)行操作,即實體·屬性(概念模型)對應實體·字段(存儲模型)。
使用EF為“Meixin”數據庫建立數據模型。“Meixin”數據庫根據真實的“在線點餐”系統(tǒng)的用戶需求設計,體現了核心的在線點餐業(yè)務數據結構,如表1所示。
數據建模操作步驟如下:①創(chuàng)建ASP.NET MVC應用程序后,按下“Shift+Ctrl+A”快捷鍵,打開“添加新項”對話框,選擇“數據”,并選擇“ADO.NET 實體數據模型”,打開EF向導;②點擊“添加”按鈕,在 “實體數據模型向導”對話框,選擇“從數據庫生成”;③點擊“下一步”,在 “實體數據模型向導”對話框,創(chuàng)建數據庫連接,連接到“Meixin”數據庫,EF向導自動生成連接串;④將連接串保存到Web.Config,點擊“下一步”,選擇數據表“u_user”;⑤點擊“完成”,Visual Studio創(chuàng)建出數據模型關系圖;⑥EF向導自動生成的meixinEntities類,稱為“數據庫上下文操作類”,位于/Models/Model1.Context.cs。同時生成的m_user類,稱為“業(yè)務實體類”,位于/Models/m_user.cs。
4 結語
研究表明,在ASP.NET程序設計開發(fā)過程中,使用EF創(chuàng)建數據模型,并通過面向對象的方法來實現對數據庫的增刪改查等操作,對減少代碼重復性,增加程序擴展性和靈活性具有積極影響。隨著移動應用平臺和云端數據庫的逐漸普及,選擇一款合適的數據建模方式能極大提高開發(fā)效率,并增加程序的擴展性和靈活性,達到事半功倍的效果。
參考文獻:
[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.
(責任編輯:孫 娟)