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

首頁 > 學院 > 開發(fā)設(shè)計 > 正文

重新認識了下Entity Framework

2019-11-10 20:05:10
字體:
供稿:網(wǎng)友

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

什么是Entity Framework

  Entity Framework是一個對象關(guān)系映射O/RM框架。

  Entity Framework讓開發(fā)者可以像操作領(lǐng)域?qū)ο?domain-specific objects)那樣操作關(guān)系型數(shù)據(jù)(relational data)。

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

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

  Entity Framework提供了以下服務(wù),使開發(fā)者可以更加側(cè)重于程序業(yè)務(wù)邏輯,而非數(shù)據(jù)訪問的基本操作。

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

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

  3. 懶加載(lazy loading)

  4. 查詢翻譯(query translation)

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

  Entity Framework是一個開源框架。

 

什么是O/RM

  O/RM是一種工具,可以自動地把領(lǐng)域?qū)ο髷?shù)據(jù)存儲到關(guān)系型數(shù)據(jù)庫(如MS SQL Server),而不需要大量的編碼。

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

  1. 領(lǐng)域?qū)ο?Domain class objects):我們定義的類。

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

  3. 映射信息(Mapping information):領(lǐng)域?qū)ο笈c關(guān)系型數(shù)據(jù)庫對象之間轉(zhuǎn)換的信息。

  O/RM允許開發(fā)者把數(shù)據(jù)庫設(shè)計和領(lǐng)域?qū)ο笤O(shè)計獨立開,讓程序更具有可維護性和可擴展性。

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

  一個典型的數(shù)據(jù)庫與應(yīng)用程序的O/RM交互如下圖所示:

  

 

Entity Framework的結(jié)構(gòu)

  Entity Framework的總體結(jié)構(gòu)如下圖所示。

  

 

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

  1. Conceptual model:概念模型包含了模型的類定義,以及類之間的關(guān)系。概念模型的設(shè)計獨立于數(shù)據(jù)庫表設(shè)計。

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

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

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

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

  Object Service:數(shù)據(jù)庫數(shù)據(jù)訪問的主要入口,主要職責是物化(materialization),把Entity Client Data PRovider返回的數(shù)據(jù)轉(zhuǎn)換成實體對象結(jié)構(gòu)。 

  Entity Client Data Provider:把LINQ to Entities或Entity SQL轉(zhuǎn)換成數(shù)據(jù)庫SQL。和ADO.Net Data Provider進行通訊,發(fā)送或檢索數(shù)據(jù)庫數(shù)據(jù)。

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

 

Entity Framework的開發(fā)模式

  Entity Framework提供了三種開發(fā)模式:

  1. Code First

  2. Database First

  3. Model First

  

  Code First:

  

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

  那些遵循領(lǐng)域驅(qū)動開發(fā)(DDD)原則的開發(fā)者,更傾向于一開始先編寫自己的領(lǐng)域類,然后再生成數(shù)據(jù)庫來實現(xiàn)數(shù)據(jù)持久化。

 

  Database First:

   

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

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

 

  Model First:

   

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

  

  總結(jié):

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

  2. Database First是根據(jù)數(shù)據(jù)庫生成視覺模型設(shè)計器(EDMX)及領(lǐng)域類。

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

 

選擇Entity Framework開發(fā)模式

  

  1. 如果你有一個現(xiàn)成的程序,并且已經(jīng)定義了領(lǐng)域類,那么,可以使用Code First的開發(fā)模式來生成數(shù)據(jù)庫進行開發(fā)。

  2. 如果你有已個現(xiàn)成的數(shù)據(jù)庫,那么,可以使用Database First的開發(fā)模式來生成EDM進行開發(fā)。

  3. 如果你沒有現(xiàn)成的數(shù)據(jù)庫,也沒有定義好的領(lǐng)域類,而你更傾向于使用圖形化界面來設(shè)計數(shù)據(jù)庫模型,那么,可以使用Model First的開發(fā)模式進行開發(fā)。

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

  

DbContext

  

  DbContext是Entity Framework的一個重要部分,它是領(lǐng)域或?qū)嶓w類與數(shù)據(jù)庫之間的橋梁。

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

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

  Querying:DbContext把LINQ to Entities查詢轉(zhuǎn)換成SQL查詢,并發(fā)送到數(shù)據(jù)庫。

  Change Tracking:DbContext會跟蹤從數(shù)據(jù)庫查詢出來的實體的狀態(tài)變更。

  Persisting Data:DbContext根據(jù)實體的狀態(tài)提供插入,更新和刪除等數(shù)據(jù)庫操作。

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

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

  Object Materialization:DbContext把表原始數(shù)據(jù)轉(zhuǎn)換成實體對象。

  

實體生命周期

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

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

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

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

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

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

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

 

  下圖說明了實體狀態(tài)如何影響數(shù)據(jù)庫操作。

   

 

  1. 新的實體具有Added的狀態(tài),DbContext后續(xù)會在數(shù)據(jù)庫中執(zhí)行插入操作。

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

  3. 修改了檢索出來的實體的屬性值,實體會修改狀態(tài)為Modified,DbContext后續(xù)會在數(shù)據(jù)庫中執(zhí)行更新操作。

  4. 需要刪除的實體會具有Deleted的狀態(tài),DbContext后續(xù)會在數(shù)據(jù)庫中執(zhí)行刪除操作。

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

 

Entity Framework版本

版本

引入功能

EF 3.5

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

EF 4.0

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

EF 4.1

在ObjectContext的基礎(chǔ)上簡化了DBContext API,引入Code First開發(fā)模式。

EF 4.3

引入Code First Migrations,可以根據(jù)定義的Code First模型來創(chuàng)建或修改數(shù)據(jù)庫。

EF 5.0

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

EF 6.0

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

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

 

參考資料

本文大部分內(nèi)容來自:Entity Framework Tutorial

少量內(nèi)容參考:Entity Framework官網(wǎng)


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
亚洲大片av| 91丨九色丨蝌蚪富婆spa| 在线观看中文av| 91久久精品无嫩草影院| 亚洲熟女乱综合一区二区| 黄色在线观看www| 在线午夜精品自拍| 欧美少妇性xxxx| 午夜不卡av免费| 高清不卡一区| 亚洲午夜影视影院在线观看| 男女超爽视频免费播放| 在线电影院国产精品| 最新亚洲精品| 久久婷婷五月综合色国产香蕉| 影音先锋5566资源站| 亚洲精品7777xxxx青睐| 亚洲精品一区二区在线播放∴| 国产在线观看免费播放| 精品处破学生在线二十三| 欧美怡红院视频| 欧美乱人伦中文字幕在线| 97视频在线免费观看| 欧美性做爰猛烈叫床潮| 91cn在线观看| 一区二区三区国产免费| 亚洲爱爱视频| 999国产视频| 久久琪琪电影院| 超碰在线免费看| 黄色特一级视频| 伊人久久亚洲影院| aaa日本高清在线播放免费观看| 91pony九色| 欧美黄色免费视频| av av在线| 欧美肥妇bbwbbw| 日韩黄色三级| 美国黑人一级大黄| 久久国产精品毛片| 一区二区免费在线| 国产午夜精品一区二区理论影院| 国内在线观看一区二区三区| av大片在线免费观看| 66av国产| 国产精成人品localhost| eeuss影院在线观看第一页| 日本高清在线观看| 国产视频手机在线播放| 国产xxxxx在线观看| 在线人成日本视频| 中文字幕免费观看| 午夜精品久久久久久久99| 91在线观看免费高清| 国产精品玖玖玖| 久久久久久久欧美精品| 国产视频三区四区| 日韩成人一区二区三区在线观看| 成人香蕉社区| 亚洲精品午夜久久久久久久| 天堂在线一区二区三区| 欧美人与性囗牲恔配| 日韩毛片高清在线播放| a亚洲天堂av| 精品一区二区三区五区六区| 超级砰砰砰97免费观看最新一期| 97自拍视频| 熟女视频一区二区三区| 青青艹视频在线| 一呦二呦三呦国产精品| 国产成a人亚洲精v品在线观看| 亚洲国产精品一区二区第四页av| 四虎影院成人在线观看| 国产精品久久久久国产精品日日| 在线观看国产精品网站| 日本亚洲精品| 国产高潮在线| 国产精品久久久久久久久久齐齐| 五月婷婷一区| 成人在线免费观看av| 韩国av免费在线观看| 国产乱精品一区二区三区| 一级黄色片网址| 午夜精品福利一区二区三区蜜桃| 一区二区中文字幕在线观看| 青青草原国产在线视频| 亚洲一区二区福利视频| 在线电影中文日韩| 国产精品久久久久久久久久久不卡| 亚洲av综合一区二区| 杨幂毛片午夜性生毛片| xxxxx欧美| 精品亚洲国产成av人片传媒| 免费网站在线观看人| 国产黄色一区| 一区二区三区在线观看动漫| 国产99久久精品一区二区300| 精品乱码一区二区三四区视频| 图片一区二区| 999国产精品永久免费视频app| 亚洲一区二区三区在线免费观看| 国产一区二区三区国产| 久久久亚洲高清| 精品一区二区在线观看| 激情综合五月| 亚洲综合电影| 国产伦精品一区二区三区千人斩| 四虎国产精品永久免费观看视频| 久久久久久综合| 久久精品主播| 欧洲中文在线| 欧美激情网址| 在线免费看v片| 影音先锋可以看的网站| 正在播放91九色| 日韩精品免费一区二区三区| 一区二区三区的久久的视频| 免费av不卡在线观看| 久久99精品久久久久久青青日本| 欧美日韩精品综合在线| 国产精品大陆在线观看| 少妇性l交大片7724com| 精品一区二区三区免费爱| 成人免费网站视频| 国产日韩v精品一区二区| 国产不卡精品视男人的天堂| 国产欧美日韩亚洲| 亚洲日本视频在线观看| 欧美jjzz| 国产在线a视频| 国产日韩一区二区在线| 91在线观看地址| 欧美成人精品一区二区综合免费| 国产中文字幕精品| av资源中文色综合| 岛国在线视频| 日韩欧美二区三区| 成人信息集中地欧美| 国产精品178页| 亚洲精品中文字幕有码专区| 国产人与zoxxxx另类91| 亚洲天堂网站在线| 欧洲美女免费图片一区| 最近中文字幕无免费| 欧美三级免费看| 日本高清不卡中文字幕| 日韩精品xxxx| 欧美在线观看视频网站| 开心九九激情九九欧美日韩精美视频电影| 18成人免费观看视频| 韩国精品主播一区二区在线观看| 久久亚洲精品国产| 黄色录像免费观看| 六月丁香激情网| 国产999精品久久久影片官网| 又黄又爽在线观看| 亚洲欧美一区在线| 久草在现在线| 不卡av电影在线播放| 亚洲宅男一区| 日韩美女视频免费在线观看| av亚洲一区二区三区| 少妇户外露出[11p]| fc2人成共享视频在线观看| 狠狠色丁香婷婷综合影院| 日本不卡视频一区二区| 久久男人的天堂| www.亚洲欧美| 伊人影院在线观看| 亚洲人精品一区| 性中国古装videossex| 亚洲aaaaaa| 无罩大乳的熟妇正在播放| 国产精品18久久久久久久久久久久| www.97视频| 91av资源网| 一区二区三区视频免费看| 国产精品一区二区无码对白| 最新精品国偷自产在线| 无码日韩精品一区二区免费| 成人国产精品免费观看视频| 欧美成人精品一区二区三区在线看| 欧美国产日韩亚洲一区| 国产精品一区二区你懂的| 精品嫩草影院久久| 日韩女优视频免费观看| 国产精品久久777777换脸| 激情五月五月婷婷| 99久久国产综合色|国产精品| 国产精久久久| 欧美私人啪啪vps| 狠狠做深爱婷婷久久综合一区| 牛人盗摄一区二区三区视频| 无码av天堂一区二区三区| 日韩vs国产vs欧美| aaa亚洲精品一二三区| 成人激情视频在线| www红色一片_亚洲成a人片在线观看_| 7m第一福利500精品视频| 欧美3p视频在线观看| 国产精品美女主播| 国产精品裸体瑜伽视频| 欧美曰成人黄网| 五月六月丁香婷婷| 欧美黑粗硬大| 97超超碰碰| 亚洲国产精品久久久久婷婷884| 制服师生第一页| 国产精品传媒麻豆hd| 日日狠狠久久偷偷四色综合免费| 亚洲精品电影在线一区| 日韩中文在线电影| 久久www人成免费看片中文| 一级片在线免费观看视频| 在线看黄网址| 影音先锋男人资源在线观看| 欧美一性一交| 一本到不卡精品视频在线观看| 色婷婷在线播放| 黄色三级在线观看| 99久久精品国产亚洲精品| 四虎激情影院| 日韩精品中文字幕在线| 日韩久久久久久| 精品毛片在线观看| 欧美日韩免费观看一区二区三区| 又色又爽的视频| 成人av播放| 日本vs亚洲vs韩国一区三区二区| 日本黄色的视频| 九色porny丨国产精品| 国产制服91一区二区三区制服| 日产中文字幕在线精品一区| 午夜伦欧美伦电影理论片| 国产喷水在线观看| 久久久久久香蕉| 国产在线拍揄自揄拍无码视频| av网址观看| 一二三四中文字幕| 中文字幕制服丝袜在线| 国产一区喷水| 99xxxx成人网| 国产欧美日韩在线看| 久久精品无码人妻| 国产真实乱子伦精品视频| 久久露脸国产精品| 国产日韩av一区| 欧美激情一区二区视频| 欧美日韩亚洲一区二区三区| 99久久综合国产精品二区| 欧美黄片一区二区三区| 日本高清免费在线视频| 国产男女无套在线播放| 日韩欧美精品免费在线| 亚洲综合激情另类小说区| 久久成人精品电影| 国内揄拍国内精品久久| 在线欧美成人| 欧美videossex极品| 免费成人小视频| 日韩精品www| 成人精品视频一区| 亚洲小视频在线播放| y111111国产精品久久久| 日本三级亚洲精品| xxx在线播放| 精品免费视频| 国内综合精品午夜久久资源| 欧美少妇在线观看| 欧美在线视频你懂得| 亚洲xxxx3d动漫| 老司机福利av| 国产精品自产拍在线观| 亚洲色图另类图片| 亚洲精品久久久久久久久| 久久免费视频一区| 国产成人av一区二区三区在线| 亚洲日本在线a| 九色视频网站入口| 在线影视一区二区三区| 国产一区二区观看| 十大黄色软件免费看| 成人国产网站| 四虎影成人精品a片| 精品国产91久久久久久浪潮蜜月| 亚洲国产精品自拍视频| 激情视频免费在线| 日韩欧美看国产| 在线高清一区| 天堂中文视频在线| 2021久久国产精品不只是精品| 无码人妻精品一区二区三区在线| 欧美黑人一区二区| 欧美在线黄色| 欧美综合亚洲图片综合区| 91久久精品国产91久久性色| 精品不卡视频| 国产精品十八以下禁看| 毛片久久久久久| bl在线肉h视频大尺度| 欧美日韩久久久久久| 久久日韩粉嫩一区二区三区| 三级av在线| 91久久视频| 17c精品麻豆一区二区免费| 欧美本精品男人aⅴ天堂| 欧美日韩综合在线观看| 欧美最猛性xxxx免费| av女优在线播放| 欧美日韩国产成人在线免费| 中文字幕亚洲第一| 国产在线不卡一卡二卡三卡四卡| 一区二区高清不卡| 三级黄在线播放| 曰本人一级毛片免费完整视频| 日日碰狠狠添天天爽| 日韩欧美视频专区| 国产精品视频在线看| 国产一级爱c视频| 亚洲一一在线| 婷婷在线播放| 欧美午夜精品久久久久久人妖| 成视频在线免费观看| 亚洲精品国产精品国产自| 最新av在线播放| 国产亚洲精品久久777777| 亚洲国产免费av| 欧美主播一区二区三区美女|