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

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

重新認(rèn)識(shí)了下Entity Framework

2019-11-10 20:14:51
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

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

什么是Entity Framework

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

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

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

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

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

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

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

  3. 懶加載(lazy loading)

  4. 查詢翻譯(query translation)

  Entity Framework是ADO.NET的加強(qiáng),它給開(kāi)發(fā)者提供了數(shù)據(jù)庫(kù)訪問(wèn)和存儲(chǔ)的自動(dòng)化機(jī)制。

  Entity Framework是一個(gè)開(kāi)源框架。

 

什么是O/RM

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

  O/RM包含三個(gè)重要的部分:

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

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

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

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

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

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

  

 

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

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

  

 

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

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

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

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

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

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

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

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

  ADO.Net Data Provider:ADO.Net Data Provider使用標(biāo)準(zhǔn)的ADO.Net和數(shù)據(jù)庫(kù)進(jìn)行交互。

 

Entity Framework的開(kāi)發(fā)模式

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

  1. Code First

  2. Database First

  3. Model First

  

  Code First:

  

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

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

 

  Database First:

   

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

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

 

  Model First:

   

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

  

  總結(jié):

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

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

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

 

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

  

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

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

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

  我個(gè)人的話,任何情景都會(huì)使用Code First的開(kāi)發(fā)模式,因?yàn)樗容^靈活,但是對(duì)開(kāi)發(fā)者本身的要求會(huì)更高一些。

  

DbContext

  

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

  DbContext是一個(gè)很重要的類,主要職責(zé)是以對(duì)象的方式和數(shù)據(jù)進(jìn)行交互,它包含以下活動(dòng):

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

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

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

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

  Caching:DbContext默認(rèn)實(shí)現(xiàn)一級(jí)緩存,在Context類的生命周期期間,它會(huì)保存檢索出來(lái)的實(shí)體。

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

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

  

實(shí)體生命周期

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

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

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

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

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

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

  Detached:實(shí)體不被上下文跟蹤。

 

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

   

 

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

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

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

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

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

 

Entity Framework版本

版本

引入功能

EF 3.5

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

EF 4.0

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

EF 4.1

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

EF 4.3

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

EF 5.0

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

EF 6.0

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

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

 

參考資料

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

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


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
亚洲自拍三区| 欧美亚洲禁片免费| 99亚洲国产精品| 天天干天天做天天操| a级大胆欧美人体大胆666| 欧美激情黑白配| 国产精品ⅴa有声小说| 五月香视频在线观看| 亚洲奶大毛多的老太婆| 尤物网站在线观看| 乱妇乱女熟妇熟女网站| 日韩免费电影一区二区| 国产一级片网站| 欧美尤物美女在线| 亚洲柠檬福利资源导航| 在线观看的网站你懂的| 97超碰欧美中文字幕| 国产97在线|亚洲| 婷婷5月激情5月| 亚洲久久视频| 日韩一区二区三区高清| 91精品尤物| xxxx69hd| 亚洲成人免费在线观看| 一女三黑人理论片在线| 久久久久久久午夜| 欧美成人精品1314www| 亚洲一区二区三区四区精品| 成年人视频网站免费观看| 林ゆな中文字幕一区二区| 日韩欧美精品在线| 精品一区在线看| 毛片在线网站| 永久免费在线看片视频| 欧美精品韩国精品| 日韩在线观看视频免费| 欧美激情日韩图片| 亚洲一区二区三区四区中文字幕| 窝窝九色成人影院| 亚洲色图另类色图| 国产污污在线观看| 国产在线久久久| 五月天综合婷婷| 日韩精品自拍偷拍| 久久久人成影片免费观看| 中文乱码人妻一区二区三区视频| 欧美极度另类性三渗透| 欧美高清xxx| 国产1区2区3区中文字幕| 欧美精品自拍视频| 九色免费视频| 黄色网址免费在线观看| 成年人网站免费视频| 久久成人免费视频| 中文字幕日本在线观看| av午夜在线| 日韩免费成人| 久久最新网址| 国产农村妇女精品一二区| 国产精品日本精品| 精品人妻无码一区二区三区| 欧美成人精品一区二区三区在线看| 日本在线视频网| japanese在线观看| 成人性生交大片免费看网站| 一本一道久久a久久综合蜜桃| 欧美乱妇15p| 欧美日韩在线不卡视频| 亚洲第一成年人网站| 免费观看在线综合色| 黄瓜视频在线免费观看| 日本免费高清视频| 91精品国产自产在线观看永久∴| 日韩精品综合一本久道在线视频| 成人黄色免费网站| 日韩欧美国产1| 国产精品久久av| 天堂中文在线网| 日韩国产中文字幕| 欧美精品系列| 亚洲色图图片专区| 激情中国色综合| 91网站黄www| 国产不卡一区二区视频| 国产精品久久久影院| 日韩三级av在线播放| 国产极品一区二区三区| 亚洲理伦在线| caoporn国产精品免费公开| 欧美做暖暖视频| 国产在线观看中文字幕| 欧美日韩在线视频一区| 久久久久中文字幕亚洲精品| 日韩国产精品一区二区| 亚洲综合色在线| av网站一区二区三区| 国产最新精品视频| 午夜性色福利影院| 国产成人精品毛片| 亚洲黄色在线观看| 成人激情视频在线| 日本免费资源| 99re6热在线精品视频播放速度| 久久婷婷五月综合| 波多野结衣一二三区| 色综合视频一区二区三区日韩| 日本十八禁视频无遮挡| 午夜免费啪视频观看视频| 久久一二三四区| 视频一区二区三区在线| 免费91在线观看| 东京热无码av男人的天堂| 色综合91久久精品中文字幕| 亚洲看片网站| 韩国欧美一区二区| 成人动漫在线播放| 午夜精品毛片| 男女午夜激烈无遮挡| 少妇视频一区二区| av女同在线| 美女久久久久久久久久| 成人一二三区视频| 欧美日韩一区二区三区在线电影| 亚洲天堂第二页| 羞羞视频在线免费看| 麻豆一区二区三区在线观看| 中文字幕一区二区三区在线不卡| 色偷偷在线观看| 国产网站免费看| 麻豆精品在线观看| 正在播放木下凛凛xv99| 欧美色xxx| 国产又粗又猛又爽| www.色综合.com| 成久久久网站| 人人妻人人玩人人澡人人爽| 国产美女一区二区三区| www.中文字幕久久久| 黄视频网站免费看| 亚洲色图100p| 亚洲一本大道在线| 日韩a**中文字幕| 日韩一区二区在线观看视频播放| 国产精品久久久久9999| 欧美黄网站在线观看| 伊人成综合网伊人222| 国产99对白在线播放| 免费在线观看精品| 国产黄色免费电影| 成人激情免费视频| 麻豆免费网站| 日韩欧美成人一区| 精品美女被调教视频大全网站| 久久99导航| 色丁香久综合在线久综合在线观看| 久久久久久久久久国产| 亚洲精品视频啊美女在线直播| 亚洲性xxxx| 九九热在线视频免费观看| 久久夜色撩人精品| 亚洲污视频在线观看| 日韩精品久久久久久久的张开腿让| 亚洲精品极品少妇16p| 色综合av综合无码综合网站| 色香蕉成人二区免费| 日韩毛片一区二区三区| 欧美色123| 国产黄色一区二区三区| 91嫩草视频在线观看| 国产精品区一区二区三| 黄色免费在线网站| 99国产盗摄| 久久免费精品国产久精品久久久久| 在线观看av日韩| 日韩精品一区二区三区免费视频| 精品久久久无码人妻字幂| 日本久久成人网| 国产乱淫a∨片免费视频| 青青青国内视频在线观看软件| 国产精品久久久av久久久| 天天摸夜夜操| 成人黄色免费网址| 大陆一级毛片免费观看| 国产婷婷色一区二区三区四区| 欧洲一区二区三区| 久久国产精品首页| 最近中文字幕mv在线一区二区三区四区| 黄色工厂这里只有精品| 亚洲理论电影| www.日本久久久久com.| 岛国片在线免费观看| 亚洲欧美精品aaaaaa片| 91蝌蚪视频在线| 天堂美国久久| 动漫精品一区二区三区| 国产日韩欧美综合| 国产午夜性春猛交ⅹxxx| 成人午夜激情片| 国产视频第一区| 成人乱色短篇合集| 俺来也官网欧美久久精品| 亚洲mv在线看| 美国av一区二区| 天天干天天爽天天射| 日韩高清成人在线| 性生活免费在线观看| 肉色超薄丝袜脚交| 欧美一区二区三区久久精品| 国产人妻黑人一区二区三区| 色婷婷av一区二区三区之e本道| 久久久www成人免费毛片麻豆| 欧美中文在线观看| 亚洲资源在线看| 久久人人爽亚洲精品天堂| 欧美性一区二区| 国产欧美中文在线| 中文字幕不卡的av| 91精品在线免费视频| 黄页在线观看视频| 欧美久久久久中文字幕| 91视频免费在线看| 欧美高清第一页| 国产亚洲第一区| 久久久国内精品| 欧美激情一区二区三区久久久| 久久精品国产久精国产一老狼| 亚洲精品一区二三区| 午夜影院免费在线观看| 色噜噜狠狠一区二区三区| 成人免费看片视频在线观看| 日本xxxx裸体xxxx| 精品无人区一区二区三区竹菊| 亚洲美女av黄| 超碰在线观看免费版| 亚洲综合中文字幕在线| 国产特黄大片aaaa毛片| 精品二区在线观看| 国产成人三级在线观看视频| 麻豆精品视频在线观看| 成人c视频免费高清在线观看| 一本一道无码中文字幕精品热| 91麻豆成人精品国产免费网站| 亚洲国产乱码最新视频| 欧美一区午夜精品| 亚洲先锋成人| 亚洲成人直播| 国产66精品| 国产+成+人+亚洲欧洲在线| 国产精品玖玖玖| www.久久ai| 91精品国产乱| 色哟哟精品观看| 黄色在线播放| 日韩一级在线视频| 久久先锋影音av| 亚洲按摩av| 麻豆视频官网| 国产成人手机视频| 亚洲国产欧美一区二区三区同亚洲| 狠狠色综合播放一区二区| 人妻 日韩精品 中文字幕| 茄子视频成人在线观看| 成人欧美一区二区三区黑人麻豆| xxx性欧美在线| 四川一级毛毛片| 欧美韩日高清| 久久亚洲精品一区二区| 日韩在线精品| 国产剧情久久久久久| 国产精品毛片一区视频播| 亚洲怡红院在线| caoporm超碰国产精品| h视频在线观看免费完整版| 四虎亚洲精品| 亚洲精品欧美日韩专区| eeuss影院第1页在线| 伊人久久婷婷色综合98网| 久久99精品久久久久| 亚洲精品自在在线观看| 精品日韩欧美一区二区| 久久久久久久久99精品| 国产网站免费在线观看| 综合久久综合久久| 欧美亚洲精品一区| 国产超级va在线视频| 高清一区二区三区日本久| 555www成人网| 成人黄色小视频在线观看| 国产一级片一区二区| 成人免费看片'免费看| 国产精品老牛影院在线观看| 国产精品久久久久久久久久久久久久久久| 亚洲国产精品99久久| 欧美性suv| www.99热这里只有精品| 欧美日韩生活片| 亚洲一级二级三级| 欧美日韩电影一区二区三区| 一区二区三区四区电影| 亚洲高清123| 欧美一区二区三区在线免费观看| 日韩久久久久久久久久久| 91视频免费观看| 国产精品亚洲专一区二区三区| 另类少妇人与禽zozz0性伦| 在线观看免费高清视频| 高潮一区二区三区| 色悠悠久久综合网| 欧美精品在线视频观看| 亚洲天堂第一区| 中文字幕精品在线视频| 亚洲av永久纯肉无码精品动漫| 亚洲第一综合色| 超免费在线视频| 成人观看网站a| 欧美专区第二页| 欧洲视频一区二区三区| 国产日韩欧美电影在线观看| 免费观看的av网站| 天天夜碰日日摸日日澡性色av| 中文字幕乱在线伦视频乱在线伦视频| 日韩精品三级| 国产无遮挡在线观看| 国产美女一区二区三区| 色999五月色| 久草视频免费看| 欧美裸体bbwbbwbbw| 欧美三日本三级少妇三99|