序言

Entity Framework是微軟戰略性的數據訪問技術,不一樣與早期訪問技術,Entity Framework並不耦合在Visual Studio中,它提供了一個全面的, 基於模型的生態系統,使您可以開發包括桌面、互聯網、雲計算和基於服務的應用程序等數據庫

歷史

EFVersion1 支持Database Frist緩存

EFVersion4 支持Database Frist+Model First【along with full Plain Old CLR Object (POCO) support and
default lazy loading behavior】 架構

EFVersion4.1一EFVersion4.3 支持Database Frist+Model First+Code Frist框架

EFVersion5  改進性能,支持枚舉,表值函數、空間類型, 存儲過程【此時只限於Database Frist】,與MVC框架的進一步結合。異步

EFVersion6 提供了異步的查詢和更新,在CodeFrist中開始支持存儲過程,提高性能以及引入一些新特性。函數

模型

使用EntityFramework建立一個模型,最顯著的特色就是建立一個實體數據模型(Entity Data Model【EDM】),使用EDM能夠自定義實體類和數據表之間的映射關係工具

Developer:只須要着眼於領域對象模型的開發【便可以直觀描述具體問題信息的類】性能

DBA:更多的從性能,擴展性,易維護性和高度規範性去設計數據庫。優化

例如:上圖中的Employees, Devices, Phone信息存在三個不一樣的物理數據表中,這是從DBA的角度考慮的,可是存developer角度設計的時候,他會在Employee類中包含Devices, Phone的集合信息,一樣的,DBA將與部門相關的全部信息所有放在一張Depeartment表中,而developer根據開發的關注的問題需求,將其細分爲(會計,市場營銷,金融等具體實體對象)。也就是說從不一樣的角度看問題,developer不會去關心DBA怎麼設計數據表,DBA也不會去關心developer怎麼設計實體類。他們可能同處在一個項目組中,可行其職,最優化的設計本身的方案而互不影響充分的解耦,而交互的工做就由EntityFramework進行處理了。編碼

 Entity Data Model 由概念層,存儲層,映射層構成,每一層都是相互獨立的。

其中實體類是包含在概念層【conceptual layer】中,而這一層也是開發人員最關心的。也能夠利用EntityFramework自帶的工具進行反向工程,即從已存在的數據庫建立實體類,其所用的語法爲概念架構定義語言【CSDL】。

實體數據模型的存儲層定義表,列,關係和數據類型如何映射到底層數據庫。其所用的語法爲存儲架構定義語言(SSDL).

映射層定義的概念和存儲層之間的映射。除此以外,這層定義瞭如何從實體類的屬性映射到數據庫表中的列。這個層被暴露給開發者,developer能夠利用EntityFramework設計映射詳細信息的窗口或者數據註解的方式以及若是使用Code Frist方式時可利用Fluent API進行定義,其所用的語法爲映射規範語言(MSL)

術語

EntityType表明域模型中的一個類。EntityType的一個實例是一般被稱爲一個實體。若是您使用的是EntityFramework的設計器,能夠看到如上圖所示的表示。EntityType一般有一個或多個屬性。屬性能夠是簡單的類型,如整型,字符串,等等;或者複雜類型;或者是集合。導航屬性用於關聯其餘相關實體(一般經過外鍵關係數據庫中的表示)。非導航屬性被稱爲標量屬性

兩個實體之間的關係被稱爲關聯。EntityTypes之間的關聯顯示在設計視圖中是鏈接EntityTypes的一條線。

 EntityType有一個屬性或一組屬性表明其的EntityKey屬性。一個的EntityKey惟一標識該實體,它最常被映射到底層數據庫的一個主鍵 。

 context object 是獲取EntityFramework服務的網關。管理數據庫鏈接,生成參數化SQL,執行數據存取,緩存對象,跟蹤和抽象數據轉換爲包含具體的參數類型的實體類。

DbContext 是對EntityFramework支持的ObjectContext的一種包裝,於是更加直觀,友好。

 怎麼編碼

1.EF/VS借力於T4模板自動生成代碼

2.使用CodeFrist的模式手動編寫獨立於EntityFramework管道的POCO類【也可藉助Entity Framework Power Tool反向生成】。

相關文章
相關標籤/搜索