Entity Framework是以ADO.NET爲基礎,面向數據的「實體框架」。如下簡稱EF。mysql
它利用了抽象化數據結構的方式,將每一個數據庫對象都轉換成應用程序對象 (entity),數據字段都轉換爲屬性 (property),關係則轉換爲結合屬性 (association),讓數據庫的 E/R 模型徹底的轉成對象模型,如此讓程序設計師能用最熟悉的編程語言來調用訪問。算法
我的認爲百科上對EF一句比較經典的解釋爲:讓上層的應用程序碼能夠如面向對象的方式般訪問數據。 sql
過去咱們對數據庫都是直接讀取,業務數據中都是使用DataSet、DataTable等來傳值,形成代碼醜陋,嚴重脫離了OO的思想。數據庫
舉個例子,當向數據庫中存儲時,實體框架主要是用來幫助咱們把一個個對象存儲到數據庫中去(即經過對象與數據庫「打交道」),只要把對象交給實體框架,不用本身寫SQL語句,它會幫助咱們自動生成SQL語句,這裏生成的SQL語句經過ADO.net發送到數據庫中去,即操做數據庫仍是經過ADO.Net,因此本文首句說到了「EF是以ADO.NET爲基礎,面向數據的‘實體框架’ 」。編程
具體過程能夠用下圖表示:數據結構
如上圖,假如要把內存中的兩個實體Student和Teacher存儲到數據庫中,EF會自動將實體經過EDM的映射,將一個實體做爲一條記錄存入到數據庫中去,那EF是如何判斷哪一個實體應該存到哪張表裏,哪一個屬性應該存到哪一個字段裏呢?這就是映射的強大所在:框架
在VisualStudio中,映射經過 .edmx 文件來體現,.edmx文件的本質是一個 XML 文件,它用於定義概念模型、存儲模型和這些模型之間的映射。編程語言
好比在上例的映射中,能夠經過相似於以下形式來體現:spa
1 <!-- CSDL 此處表示實體 --> 2 <Entity Name="Student"> 3 <Pro Name="StuName"> 4 <Pro Name="StuSex"> 5 <Pro Name="StuAge"> 6 </Entity> 7 8 <!-- 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 文件建立和基本格式。.net
經過上面能夠了解到,從讀代碼的角度來講,EF可使咱們在不須要了解數據結構的狀況下就能夠很好地理解;從實現的角度來講,EF可使存儲「模型化」,就如同將不少個對象存儲在一個List中似的,向數據庫表裏存儲的都是一個個實例,從數據庫中取到的也都是一個個實例。程序如此跟數據庫的交互,和OO化的代碼相互對應,容易「對接」。