
?
三、課程介紹
3.1 關(guān)于ORM
一、什么是ORM
ORM,即Object-Relational Mapping(對(duì)象關(guān)系映射),它的作用是在關(guān)系型數(shù)據(jù)庫(kù)和業(yè)務(wù)實(shí)體對(duì)象之間作一個(gè)映射,這樣,我們?cè)诰唧w的操作業(yè)務(wù)對(duì)象的時(shí)候,就不需要再去和復(fù)雜的SQL語(yǔ)句打交道,只需簡(jiǎn)單的操作對(duì)象的屬性和方法。?
?
二、使用ORM的優(yōu)勢(shì)?
優(yōu)勢(shì)一、 隱藏了數(shù)據(jù)訪問(wèn)細(xì)節(jié),“封閉”的通用數(shù)據(jù)庫(kù)交互,ORM的核心。他使得我們的通用數(shù)據(jù)庫(kù)交互變得簡(jiǎn)單易行,并且完全不用考慮該死的SQL語(yǔ)句。快速開(kāi)發(fā),由此而來(lái)。?
優(yōu)勢(shì)二、ORM使我們構(gòu)造固化數(shù)據(jù)結(jié)構(gòu)變得簡(jiǎn)單易行
在ORM年表的史前時(shí)代,我們需要將我們的對(duì)象模型轉(zhuǎn)化為一條一條的SQL語(yǔ)句,通過(guò)直連或是DB helper在關(guān)系數(shù)據(jù)庫(kù)構(gòu)造我們的數(shù)據(jù)庫(kù)體系。而現(xiàn)在,基本上所有的ORM框架都提供了通過(guò)對(duì)象模型構(gòu)造關(guān)系數(shù)據(jù)庫(kù)結(jié)構(gòu)的功能。這,相當(dāng)不錯(cuò)。
?
三、使用ORM的缺點(diǎn)?
第一:無(wú)可避免的,自動(dòng)化意味著映射和關(guān)聯(lián)管理,代價(jià)是犧牲性能(早期,這是所有不喜歡ORM人的共同點(diǎn))。現(xiàn)在的各種ORM框架都在嘗試使用各種方法來(lái)減輕這塊(LazyLoad,Cache),效果還是很顯著的。?
第二:面向?qū)ο蟮牟樵冋Z(yǔ)言(X-QL)作為一種數(shù)據(jù)庫(kù)與對(duì)象之間的過(guò)渡,雖然隱藏了數(shù)據(jù)層面的業(yè)務(wù)抽象,但并不能完全的屏蔽掉數(shù)據(jù)庫(kù)層的設(shè)計(jì),并且無(wú)疑將增加學(xué)習(xí)成本.?
第三:對(duì)于復(fù)雜查詢,ORM仍然力不從心。雖然可以實(shí)現(xiàn),但是不值的。視圖可以解決大部分calculated column,case ,group,having,order by, exists,但是查詢條件(a and b and not c and (d or d))。。。。。。?
世上沒(méi)有驢是不吃草的(又想好又想巧,買(mǎi)個(gè)老驢不吃草),任何優(yōu)勢(shì)的背后都隱藏著缺點(diǎn),這是不可避免的。問(wèn)題在于,我們是否能容忍缺點(diǎn)?
3.2、幾種常見(jiàn)的ORM框架的比較?
幾種常用框架的比較?
以上就是市面上比較常見(jiàn)的.net ORM框架。其實(shí)比較完美的ORM框架應(yīng)該是滿足:?
1.對(duì)象與數(shù)據(jù)庫(kù)的映射?
2.對(duì)象緩存?
3.可視化設(shè)計(jì)和代碼生成工具?
4.支持多數(shù)據(jù)庫(kù)?
5.動(dòng)態(tài)查詢?
6.延遲加載?
7.非侵入式持久化?
8.性能優(yōu)良?
9.支持存儲(chǔ)過(guò)程和事務(wù)?
10.多面向?qū)ο罂蚣苤С?
ORM框架確實(shí)很方便,但發(fā)現(xiàn)也有其不足之處,比如多表聯(lián)合查詢,對(duì)視圖和存儲(chǔ)過(guò)程的處理不理想。整體性能低于面向SQL語(yǔ)句。?
以上幾種框架比較常用的應(yīng)該是NHibernate,微軟的EF及MyBatis.NET和FluentData。?
上述幾個(gè)框架各有優(yōu)缺點(diǎn)?
如:NHibernate 師出名門(mén),大名鼎鼎的Hibernate廠商出品的專門(mén)針對(duì).NET的ORM框架,優(yōu)點(diǎn)是:功能強(qiáng)大,資料齊全,缺點(diǎn)是配置復(fù)雜,學(xué)習(xí)成本高?
微軟的EF自然是在VS開(kāi)發(fā)中首推的,優(yōu)點(diǎn)是和VS IDE集成很好,缺點(diǎn)是性能較NHiberte低,據(jù)說(shuō)6.0后,性能明顯加強(qiáng),甚至于超過(guò)NHibernate,但本人未測(cè),另外,對(duì)其他數(shù)據(jù)庫(kù)的支持需要安裝第三方插件,還有個(gè)人感覺(jué)也過(guò)于寵大,使用起來(lái),不夠靈活。MyBatic.NET功能和易用性介于NHibernate與EF之間。?
相比較而言,我們更推薦使用FluentData,一個(gè)輕量級(jí)開(kāi)源的.NET ORM數(shù)據(jù)持久化框架?
?
3.3、什么是FluentData??
FluentData:一種使用Fluent API的新型輕量級(jí)ORM模型?
FluentData 是微型 ORM(micro-ORM)家族的一名新成員,旨在比大型 ORM(full ORM)更加易用。FluentData 于本月推出,它使用 fluent API 并支持 SQL Server、SQL Azure、Oracle 和 MYSQL。?
FluentData 的設(shè)計(jì)者 Lars-Erik Kindblad 談到:?
當(dāng)前市面上的 ORM 框架,如 Entity Framework 和 NHibernate,都過(guò)于復(fù)雜而且難于學(xué)習(xí)。此外,由于這些框架自身抽象的查詢語(yǔ)言以及從數(shù)據(jù)庫(kù)到 .NET 對(duì)象的映射太過(guò)麻煩,導(dǎo)致它們生成的 SQL 都很低效。?
FluentData 另辟蹊徑,它是一個(gè)輕量級(jí)框架,擁有簡(jiǎn)單的 fluent API 并且很容易學(xué)會(huì)。?
與其他微型 ORM(如 Dapper 和 Massive)類似,F(xiàn)luentData 關(guān)注性能和易用性。它允許開(kāi)發(fā)人員擁有對(duì) SQL 較多的控制,而不是依賴 ORM 進(jìn)行自動(dòng)生成。它不僅可以使用 SQL 來(lái)執(zhí)行查詢、增添和更新操作,還可以支持使用存儲(chǔ)過(guò)程和事務(wù)。根據(jù)文檔描述,F(xiàn)luentData 可以在不改動(dòng)已有結(jié)構(gòu)的情況下,與任何業(yè)務(wù)對(duì)象一同工作。
以下是 FluentData 的一些其他特性:?
· 多結(jié)果集(Multiple Result Set):在一次數(shù)據(jù)庫(kù)操作下返回多個(gè)數(shù)據(jù)集;?
· 開(kāi)發(fā)人員可使用強(qiáng)類型對(duì)象或動(dòng)態(tài)對(duì)象;?
· 可為創(chuàng)建時(shí)需要特殊處理的復(fù)雜對(duì)象自定義實(shí)體工廠(Custom Entity Factory);?
· 具有添加其他數(shù)據(jù)庫(kù)支持的能力。?
FluentData 需要 .NET 4.0,并支持 SQL Server、SQL Azure、SQL Server Compact 以及使用 .NET 驅(qū)動(dòng)的 Oracle 和 MySQL。 想要了解進(jìn)一步信息,如代碼示例和免費(fèi)下載,請(qǐng)?jiān)L問(wèn)CodePlex 站點(diǎn)上的 FluentData。(http://fluentdata.codeplex.com/)?
?
?.png)
?
3.4、課程培訓(xùn)目標(biāo):
1. 全面了解C# 4.5 語(yǔ)法新特性
2.全面深入了解什么是FluentData,以及如何使用FluentData結(jié)合.NET進(jìn)行數(shù)據(jù)庫(kù)應(yīng)用開(kāi)發(fā)
3.通過(guò)實(shí)例融會(huì)貫通FluentData API語(yǔ)法,特性以及最佳開(kāi)發(fā)實(shí)踐
?
3.5、適合學(xué)員
1.能夠熟練使用C#語(yǔ)法開(kāi)發(fā)簡(jiǎn)單數(shù)據(jù)庫(kù)應(yīng)用。
2.了解SQL語(yǔ)句,SQL Server或MySQL,Oracle中任一種即可
?

?
3.6、課程大綱
第一部分:C# 4.5新語(yǔ)法特性(LinQ、Lambda表達(dá)式等)
.png)
?
第二部分:FluentData輕量級(jí).NET ORM持久化技術(shù)詳解
.png)
?
?