亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

重新認識了下Entity Framework

2019-11-10 20:05:10
字體:
來源:轉載
供稿:網友

http://www.cnblogs.com/Erik_Xu/p/6017144.html

什么是Entity Framework

  Entity Framework是一個對象關系映射O/RM框架。

  Entity Framework讓開發者可以像操作領域對象(domain-specific objects)那樣操作關系型數據(relational data)。

  Entity Framework減少了大部分通常需要編寫的數據操作代碼。

  Entity Framework中可以使用LINQ來查詢數據,使用強類型(strongly typed objects)來檢索和操作數據。

  Entity Framework提供了以下服務,使開發者可以更加側重于程序業務邏輯,而非數據訪問的基本操作。

  1. 狀態或變更跟蹤(change tracking)

  2. 身份或主鍵識別(identity resolution)

  3. 懶加載(lazy loading)

  4. 查詢翻譯(query translation)

  Entity Framework是ADO.NET的加強,它給開發者提供了數據庫訪問和存儲的自動化機制。

  Entity Framework是一個開源框架。

 

什么是O/RM

  O/RM是一種工具,可以自動地把領域對象數據存儲到關系型數據庫(如MS SQL Server),而不需要大量的編碼。

  O/RM包含三個重要的部分:

  1. 領域對象(Domain class objects):我們定義的類。

  2. 關系型數據庫對象(Relational database objects):數據庫表,視圖,存儲過程等。

  3. 映射信息(Mapping information):領域對象與關系型數據庫對象之間轉換的信息。

  O/RM允許開發者把數據庫設計和領域對象設計獨立開,讓程序更具有可維護性和可擴展性。

  它還提供了基本的增刪改查的功能,開發者不需要手動再編寫這部分代碼。

  一個典型的數據庫與應用程序的O/RM交互如下圖所示:

  

 

Entity Framework的結構

  Entity Framework的總體結構如下圖所示。

  

 

  EDM(Entity Data Model):EDM包含三個主要的部分 - 概念模型(Conceptual model)、存儲模型(Storage model)和映射(Mapping)。

  1. Conceptual model:概念模型包含了模型的類定義,以及類之間的關系。概念模型的設計獨立于數據庫表設計。

  2. Storage model:存儲模型是數據庫設計模型,包含了數據庫表,視圖,存儲過程,以及它們的之間的關系和鍵。

  3. Mapping:映射包含了概念模型映射到存儲模型的相關信息。

  LINQ to Entities:一種基于對象模型編寫的查詢語言,它將返回概念模型中設計的實體。

  Entity SQL:另一種和LINQ to Entities相似的查詢語言,但是它們還是有一些差異的,開發者還是需要單獨花時間去學習它。

  Object Service:數據庫數據訪問的主要入口,主要職責是物化(materialization),把Entity Client Data PRovider返回的數據轉換成實體對象結構。 

  Entity Client Data Provider:把LINQ to Entities或Entity SQL轉換成數據庫SQL。和ADO.Net Data Provider進行通訊,發送或檢索數據庫數據。

  ADO.Net Data Provider:ADO.Net Data Provider使用標準的ADO.Net和數據庫進行交互。

 

Entity Framework的開發模式

  Entity Framework提供了三種開發模式:

  1. Code First

  2. Database First

  3. Model First

  

  Code First:

  

  在Code First的開發模式中,要避免使用視覺模型設計器(EDMX),一般是先編寫POCO類,然后根據這些類去生成數據庫。

  那些遵循領域驅動開發(DDD)原則的開發者,更傾向于一開始先編寫自己的領域類,然后再生成數據庫來實現數據持久化。

 

  Database First:

   

  通過已有的數據庫來生成EDMX(Entity Data Model)的開發模式就是Database First的開發模式。

  如果數據庫變更了,EDMX(Entity Data Model)也會更新。同時,Database First也支持存儲過程,視圖等。

 

  Model First:

   

  Model First是Code First和Database First的一種折中開發模式,它提供視覺模型設計器(EDMX)來設計數據模型,然后根據數據庫模型來生成數據庫以及領域類。

  

  總結:

  1. Code First是先編寫領域類,然后根據類來生成數據庫,無視覺模型設計器(EDMX)。

  2. Database First是根據數據庫生成視覺模型設計器(EDMX)及領域類。

  3. Model First是先生成視覺模型設計器(EDMX),然后根據EDMX生成數據庫及領域類。

 

選擇Entity Framework開發模式

  

  1. 如果你有一個現成的程序,并且已經定義了領域類,那么,可以使用Code First的開發模式來生成數據庫進行開發。

  2. 如果你有已個現成的數據庫,那么,可以使用Database First的開發模式來生成EDM進行開發。

  3. 如果你沒有現成的數據庫,也沒有定義好的領域類,而你更傾向于使用圖形化界面來設計數據庫模型,那么,可以使用Model First的開發模式進行開發。

  我個人的話,任何情景都會使用Code First的開發模式,因為它比較靈活,但是對開發者本身的要求會更高一些。

  

DbContext

  

  DbContext是Entity Framework的一個重要部分,它是領域或實體類與數據庫之間的橋梁。

  DbContext是一個很重要的類,主要職責是以對象的方式和數據進行交互,它包含以下活動:

  EntitySet:DbContext包含實體集合(DbSet<TEntity>),把實體映射到數據庫表。

  Querying:DbContext把LINQ to Entities查詢轉換成SQL查詢,并發送到數據庫。

  Change Tracking:DbContext會跟蹤從數據庫查詢出來的實體的狀態變更。

  Persisting Data:DbContext根據實體的狀態提供插入,更新和刪除等數據庫操作。

  Caching:DbContext默認實現一級緩存,在Context類的生命周期期間,它會保存檢索出來的實體。

  Manage Relationship:Database First或Model First中,使用CSDL,MSL,SSDL來管理關系,在Code First中使用Fluent API來管理關系。

  Object Materialization:DbContext把表原始數據轉換成實體對象。

  

實體生命周期

  在實體的生命期中,每個實體都有一個基于上下文(DbContext)的操作的實體狀態。

  實體狀態是一個System.Data.Entity.EntityState類型的枚舉,它包含以下的值:

  Added:實體正在被上下文跟蹤,但還不存在于數據庫中。

  Deleted:實體正在被上下文跟蹤并存在于數據庫,但被標記為從數據庫刪除。

  Modified:實體正在被上下文跟蹤并存在于數據庫,而且實體的一些或所有屬性的值被修改了。

  Unchanged:實體正在被上下文跟蹤并存在于數據庫,但實體的所有屬性值都沒被修改。

  Detached:實體不被上下文跟蹤。

 

  下圖說明了實體狀態如何影響數據庫操作。

   

 

  1. 新的實體具有Added的狀態,DbContext后續會在數據庫中執行插入操作。

  2. 通過LINQ檢索出來的實體具有Unchanged的狀態,但如果調用了AsNoTracking()方法,其狀態為Detached。

  3. 修改了檢索出來的實體的屬性值,實體會修改狀態為Modified,DbContext后續會在數據庫中執行更新操作。

  4. 需要刪除的實體會具有Deleted的狀態,DbContext后續會在數據庫中執行刪除操作。

  5. 對于DbContext中已有的實體,可以通過dbContext.Entry(entity).State = EntityState.Detached的方式把狀態設置為Detached。

 

Entity Framework版本

版本

引入功能

EF 3.5

Database First模式下基本的O/RM支持。

EF 4.0

POCO的支持, 懶加載, 可測試性提升,定制化代碼生成,以及引入Model First開發模式。

EF 4.1

在ObjectContext的基礎上簡化了DBContext API,引入Code First開發模式。

EF 4.3

引入Code First Migrations,可以根據定義的Code First模型來創建或修改數據庫。

EF 5.0

宣布EF為開源項目。引入了枚舉支持,表值函數, 空間數據類型,模型多圖表,設計界面著色形狀,批量導入存儲過程,EF Power Tools,以及各種性能提升。

EF 6.0

引入了許多Code First & EF設計相關的新功能,如異步操作(asynchronous),彈性連接(connection resiliency),依賴解析(dependency resolution)等。

注:Entity Framework Core不在本文討論范圍。

 

參考資料

本文大部分內容來自:Entity Framework Tutorial

少量內容參考:Entity Framework官網


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
黑人巨大精品欧美一区免费视频| 欧美一区二区影院| 九九精品视频在线| 国产日产欧美精品| 狠狠躁夜夜躁人人爽天天天天97| 亚洲午夜性刺激影院| 狠狠躁夜夜躁人人爽天天天天97| 国产精品国产亚洲伊人久久| 奇米一区二区三区四区久久| 国产一区二区三区视频| 91久久久久久久久久久久久| 国产成人自拍视频在线观看| 亚洲成人动漫在线播放| 精品人伦一区二区三区蜜桃网站| 国产mv久久久| 亚洲最新av在线网站| 国产精品一香蕉国产线看观看| 国产91免费看片| 日韩精品视频三区| 91久久精品美女| 精品国产视频在线| 成人中文字幕在线观看| 九九久久精品一区| 日韩一区二区福利| 欧美日韩亚洲一区二区| 久久综合国产精品台湾中文娱乐网| 国产精品视频区| 91精品免费看| 在线色欧美三级视频| 亚洲欧美日韩国产中文| 欧美性jizz18性欧美| 久久精视频免费在线久久完整在线看| 亚洲老司机av| 久久久久一本一区二区青青蜜月| 欧美区在线播放| 亚州成人av在线| 福利视频第一区| 97视频免费看| 欧美午夜无遮挡| 精品爽片免费看久久| 亚洲综合在线小说| 日韩影视在线观看| 精品久久久久久中文字幕一区奶水| 黑人巨大精品欧美一区免费视频| 久久精品国产91精品亚洲| 亚洲第一免费网站| 福利二区91精品bt7086| 国产精品扒开腿爽爽爽视频| 色综合导航网站| 欧美国产日韩一区二区| 亚洲天堂开心观看| 91午夜理伦私人影院| 国产成人在线一区| 青青草一区二区| 最新91在线视频| 日韩精品极品在线观看| 欧美性猛交xxxx免费看久久久| 欧美激情按摩在线| 欧美精品18videos性欧| 亚洲成年网站在线观看| 动漫精品一区二区| 国产亚洲欧美一区| 欧洲亚洲免费视频| 亚洲女人天堂视频| 欧美黄色免费网站| 精品久久久久久久久久ntr影视| 国产日韩专区在线| www国产91| 国内偷自视频区视频综合| 91九色国产在线| 亚洲欧洲在线观看| 日韩精品在线观看视频| 亚洲国产女人aaa毛片在线| 美女av一区二区三区| 成人av番号网| 九九久久久久99精品| 亚洲免费伊人电影在线观看av| 欧美精品一区在线播放| 久久精品视频99| 亚洲精品一区二区久| 欧美成人激情视频| 欧美激情欧美激情在线五月| 97超级碰在线看视频免费在线看| 国产亚洲精品va在线观看| 欧美综合在线观看| 久久久久久久久久久免费精品| 国产日韩中文字幕在线| 成人欧美一区二区三区黑人孕妇| 亚洲free性xxxx护士hd| 69国产精品成人在线播放| 91精品国产精品| 亚洲精品一区二区三区婷婷月| 欧美精品激情在线| 久久久久久国产精品美女| 久久影视电视剧免费网站清宫辞电视| 国产精品精品国产| 日本精品va在线观看| 日日摸夜夜添一区| 精品亚洲一区二区三区四区五区| 奇米一区二区三区四区久久| 欧美激情一级欧美精品| 国产精品99久久久久久久久| 丁香五六月婷婷久久激情| 精品亚洲一区二区三区| 欧美电影在线观看完整版| 97国产真实伦对白精彩视频8| 亚洲欧美一区二区三区情侣bbw| 91香蕉嫩草神马影院在线观看| 欧美视频二区36p| 精品久久香蕉国产线看观看gif| 亚洲电影中文字幕| 欧美视频精品一区| 久久99精品久久久久久噜噜| 国产精品福利片| 欧美成人精品在线播放| 两个人的视频www国产精品| 精品精品国产国产自在线| 国内精品久久久久久久久| 亚洲成人精品视频| 久久影院免费观看| 亚洲成人久久久| 久久中文字幕国产| 在线视频一区二区| 中文字幕精品久久| 久久午夜a级毛片| 日韩大片在线观看视频| 国产不卡在线观看| 亚洲日韩中文字幕在线播放| 亚洲www永久成人夜色| 欧美午夜精品久久久久久人妖| 亚洲有声小说3d| 日本在线观看天堂男亚洲| 日产精品久久久一区二区福利| 欧美在线不卡区| 欧美电影免费观看电视剧大全| 国产在线拍揄自揄视频不卡99| 亚洲欧洲国产伦综合| 精品久久久久国产| 亚洲第一男人av| 九色成人免费视频| 日韩一区二区三区xxxx| 亚洲sss综合天堂久久| 国产精欧美一区二区三区| 欧美国产日韩中文字幕在线| 亚洲精品大尺度| 久久青草福利网站| 亚洲国产99精品国自产| 欧美与黑人午夜性猛交久久久| 欧美精品激情视频| 久久亚洲电影天堂| 国产精品久久一区主播| 欧美xxxx综合视频| **欧美日韩vr在线| 久久久亚洲影院你懂的| 最近2019中文字幕mv免费看| 日韩在线观看免费全集电视剧网站| 午夜美女久久久久爽久久| 亚洲老头老太hd| 欧美视频在线免费| 国产成人精品久久二区二区91| 97人人模人人爽人人喊中文字| 国产亚洲一区二区在线| 亚洲欧美在线磁力| 国产一区欧美二区三区|