跟著wade學習asp.net mvc + nhibernate - day 5

15
跟跟 Wade 跟跟 ASP.NET MVC + NHibernate 跟跟 Entity Collection 跟 Mapping 2012-01-06 跟跟跟

Upload: wade-huang

Post on 27-Jan-2015

141 views

Category:

Technology


1 download

DESCRIPTION

 

TRANSCRIPT

跟著 Wade 學習 ASP.NET MVC + NHibernate完成 Entity Collection 的 Mapping

2012-01-06 第五天

2

今日目標− 了解 NHibernate 的 Collection 關連種類− 了解 NHibernate 的 Collection Mapping 種類− 強大的 Lazy-Load− 完成 Entity 的 Collection Mapping− Collection And Lazy-Load Test

− 資源分享− Hibernate Mapping Cheat Sheet− http://ndpsoftware.com/HibernateMappingCheatSheet.htm

l− NHibernate Blog ( 投影片中部分圖來此 Blog)− http://ayende.com/blog/

3

1. 了解 NHibernate 的 Collection 關連種類

4

NHibernate 的 Collection 關連種類有

1. OneToOne2. ManyToMany3. OneToMany4. ManyToOne5. ManyToAny

5

OneToOne− 1 對 1 關連,以 FK 關連,跟 Table-Per-Subclass 不同,

TPS 是主鍵相同, OneToOne 是使用 FK ,但加上Unique 。

Microsoft Confidential6

ManyToMany

− 多對多關連,非常好用,如 Product 與 Tag 一個Product 可以貼多個 Tag , Tag 可以貼在多個產品上, Table 會建三個,但在 Nhibernate 只有二個 Entity 就可以,中間的對應表會自動處理。

7

OneToMany 與 ManyToOne

− 這二個是成對的,一邊設 OneToMany 另一邊設 ManyToOne

8

ManyToAny

− 這是 Nhibernate 的新功能,由一個 Key 值動態決定要撈那一個 Table 。

9

2. 了解 NHibernate 的 Collection Mapping種類

10

NHibernate 的 Collection Mapping種類− NHibernate 的 Collection Mapping 共有

四種類型,下表是差異圖。

− 依自己的需求使用 Collection 種類。

Bag Set List Map

充許重覆 Yes No Yes Key 不能重覆

可調整順序( 如

DisplayIndex)No No Yes No

使用的介面 IList ICollceton IList IDictionary

11

2. 強大的 Lazy-LoadDeveloper 的利器 ? 效能的殺手 ?

12

什麼 Lazy-Load

− Lazy-Load 是 ORM 中很重要的特色,會在使用關連時自動查尋與載入關連資料,如 :

Order order = session.Get<Order>(n);string name =order.Details[0].Product.Color.Name;

− 請問上一行程式自動下了幾次 SQL

13

什麼 Lazy-Load(2)

− 總共 : 3 次 你猜對了嗎 ?

− Lazy-Load 自動化下 Sql 的時機是在Property 的 get , Lazy-Load 在完全不需要任何處理就可以取得關連表的資料是不是很方便。

− 但 Lazy-Load 也有不適用的地方,如上一張投影片的程式如在 for(n<1000) 的迴圈中,每個迴圈 3 個 Sql ,總共會下 3000 次,效能會非常差,這時還是用 Join 只下一次Sql 會比較好。

14

完成 Entity 的 Collection Mapping

15

課程結束

Q And A 時間