http://www.cyqdata.com/nhibernate/article-detail-2523
經過大大小小的項目之後,在在DevText項目中使用下Fluent NHibernate,今天給大夥介紹一下Fluent NHibernate,以及使用這個有什麼好處及帶來什麼方便!
以下為介紹內容:
一:Fluent NHibernate基礎介紹
Fluent NHibernate提供了一個方法讓你不再需要去寫NHibernate的標準對應檔(.hbm.xml),而是可以把你的對應檔都使用C#來寫。這樣做,方便了我們的代碼重構,提供了代碼的易讀性,並精簡了項目代碼。
它還包含了如下幾個工具:
Fluent NHibernate是NHibernate核心代碼的擴充,完全相容NHibernate2.X。
二:使用Fluent NHibernate的好處是?
NHibernate就不用說了,大家都知道是一個好的ORM工具,它的mapping都是以XML格式定義的。每個類都有一個mapping檔案對應到資料庫對應的表。 Fluent NHibernate取消了這些xml檔案。
為什麼要取代XML檔案呢?
a.XML不是Just-In-Time 編譯的。當你的XML設定檔有錯誤時,你只有在運行時才能看到哪裡出錯。
b.XML是非常繁瑣的。的確在NHibernate中的設定檔,xml節點非常簡單,但是仍然掩蓋不了XML檔案本身的繁瑣性。
c.對應檔中重複的屬性設定。比如在xml中我們需要設定每個string類型的欄位都不允許為空白,長度大於1000,int型都得有個預設值為-1,這樣最終的xml設定檔你會發現有很多的重複工作。
Fluent NHibernate如何克服這些缺陷呢?
Fluent NHibernate把這些配置為檔案都轉化為了C#代碼,這樣可以讓你的mapping直接在編譯時間就完成。
下面是傳統的HBM XML mapping檔案和Fluent NHibernate的對比。
Fluent NHibernate的:http://github.com/jagregory/fluent-nhibernate
三:一個簡單的Fluent NHibernate的樣本
前面只是大致的說明了為什麼要用Fluent NHibernate。現在我們來類比一個情境,看看如何在項目中使用Fluent NHibernate。
我們情境中有Employee, Store何Product這幾個實體,product和Store之間是多對多的關係。
實體的類如下:
Employee:
Product:
Store:
如果是使用NHibernate,那麼接下來我們只能配置痛苦的XML檔案,不過用FLuent NHibernate我們就不需要寫設定檔了,只需要簡單的寫C#代碼就OK了。
說實話這個和CTP4中的mapping方式特像。
先來看看Employee的mapping檔案:
很明顯這裡的Map方法相當於XML設定檔的Property,而Reference相當於Many-To-One。
Product的Mapping如下:
這裡的HasManyToMany相當於NHibernaet中的Many-To-Many。
4.下一步是建立資料庫和SessionFactory:
建立一個資料庫:
SessionFacotry:
這裡的資料庫連接我使用的是直接輸入Server,db,username,pwd等,FluentNHibernate還支援其它各種資料庫連接形式:
最後是添加記錄:
運行程式,資料庫中表會自動建立,且資料添加成功。