
?
三、課程介紹
3.1 關于ORM
一、什么是ORM
ORM,即Object-Relational Mapping(對象(xiang)關系(xi)映射(she)(she)),它的(de)(de)作(zuo)(zuo)用是(shi)在關系(xi)型數據(ju)庫和業務實體對象(xiang)之間作(zuo)(zuo)一個映射(she)(she),這樣,我們在具(ju)體的(de)(de)操作(zuo)(zuo)業務對象(xiang)的(de)(de)時候,就不需(xu)要再(zai)去和復雜的(de)(de)SQL語句打交道,只需(xu)簡單的(de)(de)操作(zuo)(zuo)對象(xiang)的(de)(de)屬性和方法。?
?
二、使用ORM的優勢(shi)?
優(you)勢(shi)一、 隱藏(zang)了數(shu)(shu)(shu)據(ju)訪問細(xi)節,“封閉(bi)”的(de)通用數(shu)(shu)(shu)據(ju)庫交(jiao)互,ORM的(de)核心。他使得(de)我們的(de)通用數(shu)(shu)(shu)據(ju)庫交(jiao)互變得(de)簡單(dan)易行(xing),并(bing)且完全不用考慮該死的(de)SQL語句(ju)。快速開發,由此(ci)而來。?
優(you)勢二、ORM使(shi)我們構造(zao)固化數據(ju)結構變得簡(jian)單易行
在(zai)ORM年表的(de)(de)史前(qian)時代(dai),我(wo)(wo)們需要將我(wo)(wo)們的(de)(de)對(dui)象(xiang)模型轉(zhuan)化為一條(tiao)一條(tiao)的(de)(de)SQL語句,通(tong)過直連或是(shi)DB helper在(zai)關(guan)系數據庫構(gou)造我(wo)(wo)們的(de)(de)數據庫體系。而現在(zai),基(ji)本上所有的(de)(de)ORM框架都提(ti)供了通(tong)過對(dui)象(xiang)模型構(gou)造關(guan)系數據庫結構(gou)的(de)(de)功能。這(zhe),相(xiang)當不(bu)錯。
?
三、使用ORM的缺點?
第一:無可(ke)避免的,自動化(hua)意(yi)味著(zhu)映射(she)和(he)關聯管理,代價(jia)是(shi)犧(xi)牲性能(早期,這是(shi)所有不喜(xi)歡ORM人的共同點)。現(xian)在(zai)的各種ORM框架都在(zai)嘗試使(shi)用各種方法來減輕這塊(kuai)(LazyLoad,Cache),效果(guo)還是(shi)很(hen)顯著(zhu)的。?
第二:面向對象(xiang)的(de)查詢語言(X-QL)作為一種數(shu)據(ju)庫(ku)與(yu)對象(xiang)之間(jian)的(de)過渡,雖(sui)然隱藏了數(shu)據(ju)層面的(de)業務抽(chou)象(xiang),但并不能完全的(de)屏蔽掉數(shu)據(ju)庫(ku)層的(de)設計,并且無疑將增加學習成本.?
第三(san):對于復雜查詢(xun),ORM仍然(ran)力不從心。雖然(ran)可以(yi)實現(xian),但是(shi)不值的。視圖可以(yi)解決大(da)部分calculated column,case ,group,having,order by, exists,但是(shi)查詢(xun)條件(a and b and not c and (d or d))。。。。。。?
世上沒有(you)驢是(shi)不吃草的(又想(xiang)好又想(xiang)巧(qiao),買個老驢不吃草),任何優勢(shi)的背后都隱藏著缺(que)點,這是(shi)不可避免(mian)的。問題(ti)在于,我(wo)們是(shi)否能容忍缺(que)點?
3.2、幾種常見的(de)ORM框架的(de)比較?
幾種常用框架的比較(jiao)?
以上就(jiu)是(shi)市面上比(bi)較常見(jian)的(de).net ORM框架。其實比(bi)較完(wan)美的(de)ORM框架應(ying)該是(shi)滿(man)足:?
1.對象與數據(ju)庫的映射?
2.對象緩存?
3.可視化設計和代碼(ma)生(sheng)成工具?
4.支持多數據庫?
5.動態查詢?
6.延遲加載?
7.非侵入(ru)式持久化?
8.性能優良?
9.支持(chi)存儲過程(cheng)和(he)事務(wu)?
10.多面向對象框架支持?
ORM框(kuang)架確實很(hen)方便(bian),但發現(xian)也有其(qi)不足之處,比如多(duo)表聯(lian)合查(cha)詢,對(dui)視圖和存儲過程的處理不理想。整體性(xing)能低于(yu)面向SQL語句。?
以上幾種框架比較(jiao)常用的應該是NHibernate,微軟的EF及(ji)MyBatis.NET和(he)FluentData。?
上述(shu)幾個框(kuang)架各(ge)有優缺點?
如:NHibernate 師(shi)出名門,大(da)名鼎鼎的Hibernate廠商出品的專(zhuan)門針對.NET的ORM框架,優點(dian)是:功能強大(da),資料(liao)齊(qi)全,缺(que)點(dian)是配置(zhi)復雜(za),學習成(cheng)本高?
微(wei)軟(ruan)的EF自然是在VS開(kai)發中首(shou)推的,優點是和(he)VS IDE集成很(hen)好,缺點是性能(neng)較NHiberte低(di),據說6.0后,性能(neng)明(ming)顯加強,甚(shen)至于(yu)超(chao)過NHibernate,但本人未(wei)測,另外,對(dui)其他數據庫的支持(chi)需要安裝第(di)三方插(cha)件,還有個(ge)人感覺也過于(yu)寵大(da),使用起來,不夠靈活(huo)。MyBatic.NET功能(neng)和(he)易用性介于(yu)NHibernate與EF之間。?
相(xiang)比較而(er)言,我(wo)們更推薦使用FluentData,一個輕量級(ji)開源的.NET ORM數據持(chi)久化框架?
?
3.3、什(shen)么是(shi)FluentData??
FluentData:一(yi)種使用Fluent API的新(xin)型輕量級ORM模型?
FluentData 是微型 ORM(micro-ORM)家族(zu)的一名新成員,旨在(zai)比(bi)大(da)型 ORM(full ORM)更加(jia)易用。FluentData 于本月推出,它使用 fluent API 并支持(chi) SQL Server、SQL Azure、Oracle 和 MYSQL。?
FluentData 的設計者 Lars-Erik Kindblad 談到:?
當前市面上的(de) ORM 框(kuang)架(jia)(jia),如 Entity Framework 和 NHibernate,都過于復雜而且難于學(xue)習。此外(wai),由于這(zhe)些框(kuang)架(jia)(jia)自(zi)身抽象(xiang)的(de)查詢語言以(yi)及從數據庫到 .NET 對(dui)象(xiang)的(de)映射(she)太過麻煩,導致(zhi)它們生(sheng)成的(de) SQL 都很低效。?
FluentData 另(ling)辟蹊徑,它(ta)是一個輕量級框(kuang)架(jia),擁有簡單的 fluent API 并且很(hen)容易學會。?
與(yu)其他(ta)微型 ORM(如 Dapper 和(he) Massive)類似(si),FluentData 關(guan)注性能(neng)和(he)易(yi)用(yong)性。它(ta)(ta)允許開發人員擁有(you)對(dui) SQL 較多的(de)控(kong)制(zhi),而不是依賴 ORM 進行自動生(sheng)成。它(ta)(ta)不僅(jin)可以(yi)使(shi)用(yong) SQL 來執行查詢、增(zeng)添和(he)更新操作,還(huan)可以(yi)支持使(shi)用(yong)存(cun)儲(chu)過程和(he)事務(wu)。根據文(wen)檔(dang)描(miao)述(shu),FluentData 可以(yi)在不改動已有(you)結構的(de)情況下,與(yu)任何業務(wu)對(dui)象一同工作。
以(yi)下是 FluentData 的(de)一些其他(ta)特性:?
· 多結果集(Multiple Result Set):在一次(ci)數(shu)據(ju)庫操作下返(fan)回多個數(shu)據(ju)集;?
· 開(kai)發人員可使用強(qiang)類型對(dui)象(xiang)或動態(tai)對(dui)象(xiang);?
· 可為創(chuang)建時(shi)需要特殊處(chu)理的復(fu)雜對(dui)象自定(ding)義實(shi)體(ti)工廠(Custom Entity Factory);?
· 具有添加其他數據庫(ku)支(zhi)持的能(neng)力。?
FluentData 需要 .NET 4.0,并支(zhi)持 SQL Server、SQL Azure、SQL Server Compact 以及使用 .NET 驅動(dong)的 Oracle 和 MySQL。 想要了解進一步信息,如(ru)代碼示例和免(mian)費(fei)下載(zai),請訪問CodePlex 站點上(shang)的 FluentData。(//fluentdata.codeplex.com/)?
?
?.png)
?
3.4、課程培訓目標(biao):
1. 全面了解C# 4.5 語(yu)法新(xin)特性
2.全面深入(ru)了解什么是(shi)FluentData,以及如何使用FluentData結合.NET進行數(shu)據庫(ku)應用開發
3.通過實例(li)融(rong)會貫通FluentData API語法,特性以(yi)及(ji)佳開發實踐
?
3.5、適合學員
1.能夠熟練(lian)使用C#語法開發(fa)簡(jian)單(dan)數據庫應用。
2.了解(jie)SQL語句,SQL Server或(huo)MySQL,Oracle中(zhong)任一種(zhong)即可
?

?
3.6、課程大綱
第(di)一部分:C# 4.5新語法特性(LinQ、Lambda表達式等)
.png)
?
第二(er)部分:FluentData輕量級.NET ORM持(chi)久化技術詳解(jie)
.png)
?
?