數(shù)據(jù)作為軟件的重要組成部份,它的存儲(chǔ)和傳遞是每一個(gè)軟件必須斟酌的事情。EF作為web利用程序開發(fā)進(jìn)程中經(jīng)常使用的數(shù)據(jù)處理解決方案,它是如何工作的,它的特點(diǎn)是甚么?本文就此做個(gè)簡(jiǎn)單介紹。
最開始的時(shí)候,數(shù)據(jù)量比較小,并且沒有觸及到數(shù)據(jù)庫(kù),我們使用變量作為載體,保存和傳遞數(shù)據(jù),使用作用域的方式來(lái)界定變量的作用范圍;這類方式的壞處就是,每一個(gè)數(shù)據(jù)都需要1個(gè)變量,并且我們需要了解每一個(gè)變量的作用域才能正確的使用它們。
接觸到數(shù)據(jù)庫(kù)以后,變量已不能滿足大批量數(shù)據(jù)的存儲(chǔ)和傳遞,這時(shí)候候DataTable表和實(shí)體出現(xiàn)了,我們將數(shù)據(jù)庫(kù)的內(nèi)容存儲(chǔ)在實(shí)體中,在分層的軟件中,這類結(jié)構(gòu)的便捷性特別明顯,只需要在用到實(shí)體的那1層援用實(shí)體層便可,非常簡(jiǎn)單。
3層數(shù)據(jù)傳遞示意圖:
在web的利用程序開發(fā)中,不可避免的要使用各種模式或框架,單1的實(shí)體層不復(fù)存在了,這時(shí)候候就需要引入1種新的數(shù)據(jù)交換方式。基于ORM的EF解決方案應(yīng)運(yùn)而生。
ORM(Object RelationMapping)對(duì)象關(guān)系映照,它解決了面向?qū)ο蠛?a href="http://www.jyygyx.com/db/" target="_blank">數(shù)據(jù)庫(kù)不匹配的問(wèn)題。
EF(Entity Framework)實(shí)體框架,它可以在代碼中將關(guān)系型數(shù)據(jù)庫(kù)轉(zhuǎn)換為類的情勢(shì),方便程序員的操作。
EF的工作方式:EF將數(shù)據(jù)庫(kù)對(duì)象轉(zhuǎn)換成了實(shí)體對(duì)象,將數(shù)據(jù)表字段轉(zhuǎn)換成了屬性,將數(shù)據(jù)表的關(guān)系轉(zhuǎn)換成了結(jié)合屬性,這樣數(shù)據(jù)庫(kù)的E/R模型將完全的對(duì)應(yīng)對(duì)象模型,程序員可以用操作1般類的方式方便的操作數(shù)據(jù)庫(kù)。
EF工作方式示意圖:
類似于3層的劃分,EF也將對(duì)象模型分為了3層,分別是概念層,對(duì)應(yīng)層,存儲(chǔ)層。概念層定義了對(duì)象模型,利用程序可以以對(duì)象的方式訪問(wèn)數(shù)據(jù);存儲(chǔ)層負(fù)責(zé)與數(shù)據(jù)庫(kù)管理系統(tǒng)做實(shí)體對(duì)應(yīng),讓數(shù)據(jù)正確的寫入和讀取;對(duì)應(yīng)層負(fù)責(zé)將概念層和存儲(chǔ)層聯(lián)系在1起,以確保數(shù)據(jù)正確的輸入和輸出。
EF的3種模式 那末實(shí)體對(duì)象或?qū)嶓w類在代碼中究竟以何種方式存在呢,它是model下的1個(gè).edmx類。創(chuàng)建這個(gè)類有3種方式,分別是CodeFirst、ModelFirst和DBfirst。CodeFirst就是,先創(chuàng)建實(shí)體,然后映照產(chǎn)生數(shù)據(jù)庫(kù),ModelFirst是先創(chuàng)建數(shù)據(jù)模型,然后生成代碼數(shù)據(jù)庫(kù),DBfirst是先創(chuàng)建數(shù)據(jù)庫(kù),然后創(chuàng)建實(shí)體。
下面以DBFirst為例,演示在mvc中EF的創(chuàng)建進(jìn)程(C#)。
1 創(chuàng)建數(shù)據(jù)庫(kù)(略)
2 創(chuàng)建1個(gè)mvc架構(gòu)(略)
3 在model層添加1個(gè)新建項(xiàng)(略)
4 選擇ADO.NET實(shí)體數(shù)據(jù)模型
5 新建連接
服務(wù)器需要選擇或填寫數(shù)據(jù)庫(kù)服務(wù)器所在的IP地址,選擇需要使用的數(shù)據(jù)庫(kù)。
6 選擇EF模型
這里提供了的DBfirst和CodeFirst,沒有ModelFirst。
7 最后選擇需要添加的數(shù)據(jù)表、視圖等。
對(duì)象模型的創(chuàng)建已完成,下1篇博客將會(huì)描寫對(duì)象結(jié)構(gòu)和如何使用。