Entity Framework學習筆記——EF簡介(一篇文章告訴你什麽是EF)
Entity Framework是以ADO.NET為基礎,面向數據的“實體框架”。以下簡稱EF。
它利用了抽象化數據結構的方式,將每個數據庫對象都轉換成應用程序對象 (entity),數據字段都轉換為屬性 (property),關系則轉換為結合屬性 (association),讓數據庫的 E/R 模型完全的轉成對象模型,如此讓程序設計師能用最熟悉的編程語言來調用訪問。
個人認為百科上對EF一句比較經典的解釋為:讓上層的應用程序碼可以如面向對象的方式般訪問數據。
過去我們對數據庫都是直接讀取,業務數據中都是使用DataSet、DataTable等來傳值,造成代碼醜陋,嚴重脫離了OO的思想。
舉個例子,當向數據庫中存儲時,實體框架主要是用來幫助我們把一個個對象存儲到數據庫中去(即通過對象與數據庫“打交道”),只要把對象交給實體框架,不用自己寫SQL語句,它會幫助我們自動生成SQL語句,這裏生成的SQL語句通過ADO.net發送到數據庫中去,即操作數據庫還是通過ADO.Net,所以本文首句說到了“EF是以ADO.NET為基礎,面向數據的‘實體框架’ ”。
具體過程可以用下圖表示:
如上圖,假如要把內存中的兩個實體Student和Teacher存儲到數據庫中,EF會自動將實體通過EDM的映射,將一個實體作為一條記錄存入到數據庫中去,那EF是如何判斷哪個實體應該存到哪張表裏,哪個屬性應該存到哪個字段裏呢?這就是映射的強大所在:
在VisualStudio中,映射通過 .edmx 文件來體現,.edmx文件的本質是一個 XML 文件,它用於定義概念模型、存儲模型和這些模型之間的映射。
比如在上例的映射中,可以通過類似於如下形式來體現:
1 <!-- CSDL 此處表示實體 --> 2 <Entity Name="Student"> 3 <Pro Name="StuName"> 4 <Pro Name="StuSex"> 5 <Pro Name="StuAge"> 6 </Entity> 78 <!-- SSDL 此處表示數據庫表 --> 9 <Table Name="Student"> 10 <Col Name="StuName"> 11 <Col Name="StuSex"> 12 <Col Name="StuAge"> 13 </Table> 14 15 <!-- C-S 此處表示實體與數據庫表的映射關系 --> 16 <Relation Entity="Student" Table="Student"> 17 <Rel ProName="StuName" ColName="StuName"> <!--實體中StuName屬性對應表中StuName字段--> 18 <Col ProName="StuSex" ColName="StuSex"> 19 <Col ProName="StuAge" ColName="StuAge"> 20 </Relation>
上述代碼並不是 .edmx文件中的確切格式,此處為了簡單說明,讀者可以看做是“偽代碼”,後面將會簡單介紹 .edmx 文件創建和基本格式。
通過上面可以了解到,從讀代碼的角度來說,EF可以使我們在不需要了解數據結構的情況下就可以很好地理解;從實現的角度來說,EF可以使存儲“模型化”,就如同將很多個對象存儲在一個List中似的,向數據庫表裏存儲的都是一個個實例,從數據庫中取到的也都是一個個實例。程序如此跟數據庫的交互,和OO化的代碼相互對應,容易“對接”。
Entity Framework學習筆記——EF簡介(一篇文章告訴你什麽是EF)