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反向生成】。