亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        ORM工具

        2016-06-16 19:19:14李潔
        電腦知識(shí)與技術(shù) 2016年10期

        李潔

        摘要:該文主要研究了微軟的Entity Framework是如何工作的,以及Entity Framework實(shí)現(xiàn)的三種方法,并且為不同的場(chǎng)景該如何選擇哪種方法做了一些討論。還論述了LINQ to Entities如何查詢(xún)實(shí)體數(shù)據(jù)模型和Entity SQL如何去查詢(xún)實(shí)體數(shù)據(jù)模型。

        關(guān)鍵詞:ORM 實(shí)體對(duì)象;數(shù)據(jù)模型;Entity Framework

        中圖分類(lèi)號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2016)10-0013-02

        1 概述

        Entity Framework是微軟公司開(kāi)發(fā)的對(duì)象關(guān)系映射工具(Object Relational Mapper簡(jiǎn)稱(chēng)ORM),他實(shí)現(xiàn)業(yè)務(wù)模型和關(guān)系型數(shù)據(jù)之間的相互映射。開(kāi)發(fā)人員基本可以在不使用底層代碼的情況下實(shí)現(xiàn)數(shù)據(jù)訪問(wèn)(data access)。Entity Framework給開(kāi)發(fā)人員提供了一套易于理解的基于模型的系統(tǒng),它可以將開(kāi)發(fā)人員從編寫(xiě)數(shù)據(jù)訪問(wèn)層和域模型相同的代碼的工作中解脫出來(lái)。Entity Framework的最初是隨著.NET Framework 3.5 SP1和Visual Studio 2008 SP1一起發(fā)布的,名稱(chēng)為Entity Framework 3.5,目前的最新版本是Entity Framework 7。

        Entity Framework可以非常容易的將概念模型的實(shí)體和關(guān)系生成數(shù)據(jù)訪問(wèn)層。應(yīng)用程序可以非常容易的執(zhí)行CRUD(create,read,update,delete)操作,以及實(shí)體間的一對(duì)一、一對(duì)多和多對(duì)多的關(guān)系。Entity Framework還有很多好處,比如:可以比ADO.NET進(jìn)行數(shù)據(jù)訪問(wèn)更加快捷,可以通過(guò)高級(jí)程序語(yǔ)言(C#等)來(lái)編寫(xiě)數(shù)據(jù)訪問(wèn)邏輯等。Entity Framework與數(shù)據(jù)庫(kù)的訪問(wèn)最終還是通過(guò)ADO.NET來(lái)完成的。

        2 理解實(shí)體對(duì)象模型

        概念數(shù)據(jù)模型是Entity Framework的關(guān)鍵。為了使用Entity Framework,我們必須創(chuàng)建概念數(shù)據(jù)模型實(shí)體對(duì)象模型(Entity Data Model,簡(jiǎn)稱(chēng)EDM)。EDM定義了模型類(lèi)、類(lèi)和類(lèi)之間的關(guān)系以及模型和數(shù)據(jù)庫(kù)圖表的映射。

        EDM一旦被創(chuàng)建,就可以執(zhí)行對(duì)概念模型執(zhí)行CRUD的操作,該操作將對(duì)象查詢(xún)裝換為數(shù)據(jù)庫(kù)查詢(xún)。查詢(xún)后的結(jié)果將通過(guò)Entity Framework再一次裝換為概念模型。Entity Framework將實(shí)體對(duì)象查詢(xún)和數(shù)據(jù)庫(kù)查詢(xún)的轉(zhuǎn)換關(guān)系,關(guān)系型數(shù)據(jù)和概念模型的映射關(guān)系存儲(chǔ)在EDM中。

        3 理解ObjectContext類(lèi)

        EDM被準(zhǔn)備后,我們可以對(duì)對(duì)象模型執(zhí)行CRUD操作。這種操作需要使用ObjectContext類(lèi)。ObjectContext類(lèi)是Entity Framework的主要對(duì)象。ObjectContext負(fù)責(zé)管理在EDM中的實(shí)體。這個(gè)類(lèi)主要負(fù)責(zé):1)管理數(shù)據(jù)庫(kù)的連接;2)對(duì)CRUD操作提供支持;3)跟蹤對(duì)象模型使其更新到數(shù)據(jù)庫(kù),ObjectContext類(lèi)中的SaveChanges方法可以將新的或者改變的對(duì)象保存到數(shù)據(jù)庫(kù)。

        還有另外一個(gè)類(lèi)名為DbContext非常類(lèi)似于ObjectContext類(lèi)。DbContext類(lèi)只是對(duì)ObjectContext類(lèi)的一個(gè)包裹器。ObjectContext不是最新的類(lèi),DbContext類(lèi)對(duì)于數(shù)據(jù)庫(kù)連接的管理和執(zhí)行CRUD操作都是較好的API。

        4 Entity Framework的開(kāi)發(fā)風(fēng)格

        一些項(xiàng)目的開(kāi)發(fā)都是分為數(shù)據(jù)庫(kù)和應(yīng)用程序兩個(gè)開(kāi)發(fā)部分,通常首先設(shè)計(jì)數(shù)據(jù)庫(kù),完成后才開(kāi)始應(yīng)用程序的開(kāi)發(fā)。但是根據(jù)需求分析的要求,應(yīng)用程序的開(kāi)發(fā)通常都是要求首先建立概念域模型,數(shù)據(jù)庫(kù)的表的建立是通過(guò)概念域模型來(lái)建立的,最后應(yīng)用程序?qū)?shí)現(xiàn)響應(yīng)的業(yè)務(wù)邏輯。還有一種可能性是,創(chuàng)建的應(yīng)用程序是高度以領(lǐng)域?yàn)橹行模蚰P屯ㄟ^(guò)類(lèi)來(lái)實(shí)現(xiàn),數(shù)據(jù)庫(kù)只是用來(lái)維持這些模型的關(guān)系。

        Entity Framework提供了對(duì)以上場(chǎng)景的不同的支持??梢詫⑵浞譃槿N不同的方法。1)數(shù)據(jù)庫(kù)優(yōu)先(DataBase First);2)代碼優(yōu)先(Code First);3)模型優(yōu)先(Model First)。應(yīng)該根據(jù)具體開(kāi)發(fā)場(chǎng)景的分析,權(quán)衡選擇哪一種方法。

        4.1 數(shù)據(jù)庫(kù)優(yōu)先

        數(shù)據(jù)庫(kù)優(yōu)先的方法,主要好處是一旦數(shù)據(jù)庫(kù)被創(chuàng)建好了,開(kāi)發(fā)人員將花比較少的時(shí)間來(lái)編寫(xiě)數(shù)據(jù)訪問(wèn)層。EDM能夠從數(shù)據(jù)庫(kù)來(lái)創(chuàng)建,并且可以根據(jù)程序的需要來(lái)改變。滿(mǎn)足的使用數(shù)據(jù)庫(kù)優(yōu)先的條件有:1)數(shù)據(jù)庫(kù)已經(jīng)創(chuàng)建完成了,或者在已有的數(shù)據(jù)上進(jìn)行開(kāi)發(fā);2)應(yīng)用程序是以數(shù)據(jù)為中心的,應(yīng)用程序的改變是否基于數(shù)據(jù)庫(kù)頻繁的改變而改變。

        4.2 代碼優(yōu)先

        代碼優(yōu)先的方法通常被用于業(yè)務(wù)邏輯類(lèi)已經(jīng)被建立好了,數(shù)據(jù)庫(kù)只是簡(jiǎn)單的被用來(lái)提供數(shù)據(jù)持久的作用。滿(mǎn)足的使用代碼優(yōu)先的條件有:1)模型類(lèi)已經(jīng)創(chuàng)建好了,只是想通過(guò)數(shù)據(jù)庫(kù)來(lái)進(jìn)行數(shù)據(jù)的持久化;2)需要完成模型類(lèi)之后才考慮是否需要將數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù);3)開(kāi)發(fā)人員不喜歡生成類(lèi)而更加偏愛(ài)編寫(xiě)類(lèi)。

        4.3 模型優(yōu)先

        模型優(yōu)先的方法,可以創(chuàng)建概念模型來(lái)創(chuàng)建數(shù)據(jù)庫(kù),之所以使用這種方法的原因是:在Visual Studio中使用模型優(yōu)先的方式可以通過(guò)Visual Entity Designer來(lái)進(jìn)行EDM的創(chuàng)建。

        5 通過(guò)LINQ to Entities查詢(xún)實(shí)體數(shù)據(jù)模型

        LINQ(Language-Integrated Query)是.NET Framework中的數(shù)據(jù)查詢(xún)技術(shù)。LINQ to Entities是對(duì)應(yīng)用程序使用LINQ去指定需要獲得的數(shù)據(jù)的實(shí)體對(duì)象模型作了一個(gè)良好的抽象,LINQ to Entities提供者負(fù)責(zé)處理訪問(wèn)數(shù)據(jù)庫(kù)和為應(yīng)用程序獲取需要的數(shù)據(jù)。當(dāng)應(yīng)用程序使用LINQ to Entities去執(zhí)行LINQ查詢(xún)實(shí)體數(shù)據(jù)模型,LINQ首先在編譯時(shí)決定需要獲取哪些數(shù)據(jù),然后,它將被執(zhí)行,結(jié)果返回為CLR對(duì)象。然而,如果想理解整個(gè)過(guò)程,關(guān)鍵是理解被執(zhí)行的查詢(xún)和獲取.NET對(duì)象的結(jié)果。

        大體的查詢(xún)過(guò)程是:應(yīng)用程序創(chuàng)建LINQ查詢(xún);LINQ to Entities依賴(lài)能夠工作在Entity Framework概念對(duì)象模型的EntityClient,使用Entity Framework的對(duì)象實(shí)體模型將EntityClient命令轉(zhuǎn)換為SQL查詢(xún);SQL查詢(xún)通過(guò)ADO.NET被傳遞到數(shù)據(jù)庫(kù);在數(shù)據(jù)庫(kù)中執(zhí)行查詢(xún);查詢(xún)結(jié)果返回到Entity Framework;Entity Framework將結(jié)果轉(zhuǎn)換為CLR類(lèi)型域?qū)嶓w;EntitiyClient將使用投影將需要的結(jié)果返回給應(yīng)用程序。

        6 通過(guò)Entity SQL查詢(xún)對(duì)象模型

        Entity SQL(ESQL)提供了類(lèi)似于SQL的語(yǔ)法,可以去編寫(xiě)針對(duì)模型類(lèi)而不是針對(duì)數(shù)據(jù)表的查詢(xún)。雖然,當(dāng)涉及實(shí)體數(shù)據(jù)模型的查詢(xún)時(shí)ESQL是一個(gè)很少使用技術(shù),但是,當(dāng)涉及對(duì)數(shù)據(jù)模型執(zhí)行動(dòng)態(tài)查詢(xún)時(shí)它卻十分有用。另一個(gè)使用ESQL的好處是開(kāi)發(fā)人員只需要知道實(shí)體數(shù)據(jù)模型的架構(gòu),而不需要知道數(shù)據(jù)庫(kù)的架構(gòu)。如果開(kāi)發(fā)人員比較熟悉SQL語(yǔ)言,那么使用ESQL將是十分容易的事情。

        如果開(kāi)發(fā)人員使用ObjectQuery去編寫(xiě)ESQL,查詢(xún)將被執(zhí)行在對(duì)象層,也就是ESQL將獲得實(shí)體模型。相比之下,如果開(kāi)發(fā)人員使用EntityCommand去編寫(xiě)ESQL,查詢(xún)將執(zhí)行EntityClient,會(huì)獲得只讀的數(shù)據(jù)行集合。

        7 總結(jié)

        本文討論了ORM和通過(guò)ORM輕松地完成數(shù)據(jù)訪問(wèn)代碼。并討論了Entity Framework是如何工作的,以及Entity Framework實(shí)現(xiàn)的三種方法,并且為不同的場(chǎng)景該如何選擇哪種方法做了一些討論。還闡述了LINQ to Entities如何查詢(xún)實(shí)體數(shù)據(jù)模型和Entity SQL如何去查詢(xún)實(shí)體數(shù)據(jù)模型。還了解了Entity SQL在ObjectQuery和EntityCommand兩種情況下獲得數(shù)據(jù)的方式。本文只是對(duì)Entity Framework常用特性作了概述,由于篇幅所限,沒(méi)有對(duì)Entity Framework進(jìn)行代碼舉例,還有一些高級(jí)特性,諸如并發(fā)管理和事務(wù)管理等知識(shí)未涉及到。既是對(duì)知識(shí)的拾遺也為拋磚引玉之用。

        參考文獻(xiàn):

        [1] 百度百科.Entity Framework [EB/OL].http://baike.baidu.com/link?url=bEeKvfk_9KDdiPnZkjAHQlrkRKa6ls_fzakDi-Gqbs _HLddRw9GoSypehKGoSypehKNP2sGzRqjWetV3Mr W2K.

        [2] 詹姆斯. ADO.NET 3.5高級(jí)編程:應(yīng)用LINQ&Entity Framework[M].孟兆煒 ,譯.北京:清華大學(xué)出版社,2012.

        亚洲一区二区三区视频免费| 免费国精产品自偷自偷免费看| 超91精品手机国产在线| 黄色a级国产免费大片| 国产一区二区精品尤物| 精品视频一区二区杨幂 | 亚洲av成人片色在线观看| 国产av人人夜夜澡人人爽麻豆| 亚洲午夜福利精品久久| av网站韩日在线观看免费| 午夜视频在线瓜伦| 台湾佬自拍偷区亚洲综合| 亚洲国产精品悠悠久久琪琪| 久久亚洲综合亚洲综合| 狠狠色噜噜狠狠狠777米奇| 98久9在线 | 免费| 国产成人综合久久精品推| 99久久久无码国产精品动漫 | 中文字幕无码毛片免费看| 首页动漫亚洲欧美日韩| 亚洲综合一区二区三区蜜臀av| 日本免费在线不卡一区二区| www插插插无码视频网站| 人妻无码Aⅴ中文系列| 日本黄色特级一区二区三区| 伊人久久大香线蕉av波多野结衣| 中文字幕无码av激情不卡| 午夜福利视频男同女同| 91九色极品探花内射| 亚洲av无码片vr一区二区三区| 亚洲av无码乱码国产麻豆穿越| 亚洲精品熟女乱色一区| 日本在线精品一区二区三区| 亚洲伊人成综合网| 国产成人精品三上悠亚久久 | 男女激情视频网站免费在线| 少妇愉情理伦片| 二区三区视频| 青青青视频手机在线观看| 日本一本一道久久香蕉男人的天堂| 国产 麻豆 日韩 欧美 久久|