跟著wade學習asp.net mvc + nhibernate - day 5
DESCRIPTION
TRANSCRIPT
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/
Microsoft Confidential6
ManyToMany
− 多對多關連,非常好用,如 Product 與 Tag 一個Product 可以貼多個 Tag , Tag 可以貼在多個產品上, Table 會建三個,但在 Nhibernate 只有二個 Entity 就可以,中間的對應表會自動處理。
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
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 會比較好。