1. 程式人生 > >EF <一>

EF <一>

logs 包含模型 ack 設計 變化 oda 生成 復雜 基礎

一:EF概述

Entity Framework(EF)是一個開源的“對象/關系映射(ORM:Object Relational Mapping)”框架,使應用程序可以使用一種“純”的對象模型來訪問關系數據庫中的數據。

EF是微軟主推的數據存取技術,其他一些重要的微軟技術領域,比如Asp.Net MVC、WCF等等,都使用EF構建數據存取層。

在實際開發中,現在通常使用EF來構建應用程序的數據存取層。

EF有三種使用場景,1. 從數據庫生成Class,2.由實體類生成數據庫表結構,3. 通過數據庫可視化設計器設計數據庫,同時生成實體類。

二、Entity Framework 架構

技術分享圖片

EDM (實體數據模型):EDM包括三個模型,概念模型、 映射和存儲模型。

概念模型 ︰ 概念模型包含模型類和它們之間的關系。獨立於數據庫表的設計。

存儲模型 ︰ 存儲模型是數據庫設計模型,包括表、 視圖、 存儲的過程和他們的關系和鍵。

映射 ︰ 映射包含有關如何將概念模型映射到存儲模型的信息。

LINQ to Entities ︰ LINQ to Entities 是一種用於編寫針對對象模型的查詢的查詢語言。它返回在概念模型中定義的實體。

Entity SQL: Entity SQL 是另一種爐類似於L2E的言語,但相給L2E要復雜的多,所以開發人員不得不單獨學習它。

Object Services(對象服務):是數據庫的訪問入口,負責數據具體化,從客戶端實體數據到數據庫記錄以及從數據庫記錄和實體數據的轉換。

Entity Client Data Provider:主要職責是將L2E或Entity Sql轉換成數據庫可以識別的Sql查詢語句,它使用Ado.net通信向數據庫發送數據可獲取數據。

ADO.Net Data Provider:使用標準的Ado.net與數據庫通信

三、EF的優點與缺點

EF的優勢有:

? All -in-1框架的類映射表,需要編寫映射代碼, 並且是很難維護的。
? 可維護性,易於理解的代碼,無需創造大的數據訪問層。
? 提供LINQ查詢數據庫,這需要從初級開發人員不太了解SQL。
? EF可以用作用於數據服務和OData Service的基礎設施。

EF的缺點有:

不適用於實時的應用程序

不能頻繁的盡心插入或更新操作,不支持大數據量批量操作

內存開銷較大,有可能會造成內存泄露

不夠靈活

四、DBContext

第四節中提到EDM生成SchoolDBEntities類,該類從System.Data.Entity.DbContext類繼承。EntityFramework4.1中Context類從ObjectContext類繼承。DbContext類與ObjectContext類似,它對ObjcetContext類進行包裝更利於開發的三種模式:CodeFirst、Model First、Database First.

DbContext是EntityFramework很重要的部分,連接域模型與數據庫的橋梁,是與數據庫通信的主要類。

技術分享圖片

bContext主要負責以下活動:

EntitySet:DbContext包含了所有映射到表的entities

Querying將Linq-To-Entities轉譯為Sql並發送到數據庫

Change Tracking從數據庫獲取entities後保留並跟蹤實體數據變化

Persisting Data根據entity狀態執行Insert、update、delete命令

CachingDbContext的默認第一級緩存,在上下文中的生命周期中存儲entity

Manage RelationshipDbContext在DbFirst模式中使用CSDL、MSL、SSDL管理對象關系,Code first中使用fluent api 管理關系

Object MaterializationDbContext將物理表轉成entity實例對象

EF <一>