Fluent NHibernate之旅
ORM大家都非常熟悉了吧,我相信也有很多朋友正在用自己或者一些公開的框架,而最常用而且強大的,非Hibernate了(Net中為NHibernate),網上的文檔非常多,不過在博客園中,介紹NHibernate的非常少,李哥的NHibernate系列(NHibernate之旅)不失為一個經典,對于新手的我們,需要完全掌握還需要很長一段路,對于新手來說,最初的配置是非常頭大的一件事情,好在老趙推薦一個開源的框架Fluent NHibernate,有了它,我們可以完全脫離配置文件,不過博客園中介紹Fluent NHibernate的文章非常少,而且官方文檔也還沒有完全,所以對于我來說也就一點一點摸索起來,這也激起了我寫這個筆記的欲望,廢話不說了,下面就介紹Fluent NHibernate,大家也一起來體驗一下Fluent Nhibernate的快感吧。
本篇內容:
1、初識Fluent NHibernate(簡稱Fluent)
2、使用NHibernate和Fluent創建ISessionFactory
3、傳統方式和Fluent的對比。
4、靈活的Fluent
?
一、初識Fluent NHibernate(簡稱Fluent)
Fluent NHibernate offers an alternative to NHibernate's standard XML mapping files. Rather than writing XML documents (.hbm.xml files), Fluent NHibernate lets you write mappings in strongly typed C# code. This allows for easy refactoring, improved readability and more concise code.
這是官方的說明,大體的話也就是用編程的方式進行配置,讓你能更好的理解,不需要編寫復雜的映射文件,它能完全替換NHibernate的映射文件,讓你在映射的時候能使用C#的強類型方式。
在開始之前,我們先下載它的Dll,當然你也可以下載它的源代碼進行修改和學習。
下載地址:http://fluentnhibernate.org/
?
?
二、使用NHibernate和Fluent創建ISessionFactory
準備工作:
1、下載Fluent類庫,其中已經包含了NHibernate最新版本。
2、下載NHibernate類庫,雖然Fluent已經有了最新版本,但我們還需要Proxy的Dll,這里我們使用NHibernate.ByteCode.Castle這個程序集。
3、建立一個空數據庫(我們使用MSSql2005),數據庫名為:MyNHibernate,這個數據庫為信任連接。
在NHibernate中,ISession是操作數據的核心,我們需要通過SessionFactory來建造ISession來進行數據的交互。SessionFactory中反映了數據庫映射關系,我們來看下配置:
<hibernate-configuration?xmlns="urn:nhibernate-configuration-2.2">
????<session-factory>
??????<property?name="dialect">NHibernate.Dialect.MsSql2005Dialect</property>
??????<property?name="connection.connection_string">
????????Server=(local);initial?catalog=MyNHibernate;Integrated?Security=SSPI
??????</property>
??????<property?name="connection.isolation">ReadCommitted</property>
??????<property?name="proxyfactory.factory_class">
????????NHibernate.ByteCode.Castle.ProxyFactoryFactory,?NHibernate.ByteCode.Castle
??????</property>
????</session-factory>
??</hibernate-configuration>大體的意思我相信大家都懂,數據庫類型和數據庫的配置,還有一些NHibernate所需的配置,這里的proxyfactory.factory_class是2.1新加入的,至于用處還不是很了解,大家可以看下李大哥的“NHibernate2.1新特性之Tuplizers”。下面我們在代碼中創建一個SessionFactory,NHibernate建議我們在一個應用程序中使用一個數據庫一個SessionFactory,這里我們用單數據庫,代碼如下: ?1????????public?static?ISessionFactory?GetCurrentFactory()
?2????????{
?3????????????if?(sessionFactory?==?null)
?4????????????{
?5????????????????sessionFactory?=?CreateSessionFactory();
?6????????????}
?7
?8????????????return?sessionFactory;
?9????????}
10
11????????private?static?ISessionFactory?CreateSessionFactory()
12????????{
13????????????return?new?Configuration().Configure().BuildSessionFactory();
14????????}
15
16????????private?static?ISessionFactory?sessionFactory
17????????{
18????????????get;
19????????????set;
20????????}
傳統的方式其實已經非常靈活和簡單了,但配置文件真的有點頭大,那么多的屬性,還有很多特性(Attribute),接下來我們來看下Fluent折疊代碼
使用Fluent我們不需要再進行配置,我們可以完全拋開xml文檔,前面說過Fluent是對Mapping的一個代碼化,Mapping的一切功能,我們都能通過Fluent進行配置。
因為Fluent是基于NHibernate的,它只實現了NHibernate的Mapping功能,其他功能還不能代替,所以我們的項目中要同時引入NHibernate和FluentNHibernate兩個類庫。代碼如下:
?1????????public?static?ISessionFactory?GetCurrentFactory()?2????????{
?3????????????if?(sessionFactory?==?null)
?4????????????{
?5????????????????sessionFactory?=?CreateSessionFactory();
?6????????????}
?7
?8????????????return?sessionFactory;
?9????????}
10
11????????private?static?ISessionFactory?CreateSessionFactory()
12????????{
13????????????return?Fluently.Configure()
14????????????????.Database(
15????????????????????FluentNHibernate.Cfg.Db.MsSqlConfiguration.MsSql2005
16????????????????????????.ConnectionString(s?=>?s.Server(".")
17????????????????????????????????.Database("MyNHibernate")
18????????????????????????????????.TrustedConnection())
19????????????????).BuildSessionFactory();
20????????}
21??????????????private?static?ISessionFactory?sessionFactory
22????????{
23????????????get;
24????????????set;
25????????}
這樣就可以了,我們完全拋開了配置,簡單的一些代碼,已經完成了SessionFactory的配置工作,或許你還有一些配置,在后面的文章中會繼續為您講解。折疊代碼
兩種方式的創建寫好了,因為是測試,所以寫的比較亂,下面我們寫一個測試代碼,只需要測試一個方法即可。代碼如下:
?2public?void?NHibernateFactory()
?3{
?4??? var?factory?=?TradSessionFactory.GetCurrentFactory();
?5}
?6[TestMethod]
?7public?void?FluentFactory()
?8{
?9??? var?factory?=?FluentSessionFactory.GetCurrentFactory();
10}
11
運行一下,結果如下:
如果數據庫配置是正確的話,你會看到如上的結果。
三、傳統方式和Fluent的對比
???? 上面的演示相信大家都能看明白,兩者之間的對比也比較明顯的顯露出來,傳統的方式我們只需要編寫正確的配置文件,相對比較靈活,一些修改的話都可以在配置文件中進行更新,比如Mappings,而上面的代碼,Fluent雖然使用代碼的方式進行了配置,省去了配置文件,但靈活性卻沒有傳統方式那么好,修改一些配置的時候,我們得擴充我們的CreateSessionFactory的方法,不過Fluent更符合人類的思考行為,而且有VS這么強大IDE,在編寫代碼的同時,能夠享受強大的智能感知。
???? 兩者之間都各有長短,或許你還沒有體會到Fluent的強大,在日后的Mappings時,你會慢慢了解為什么他會叫Fluent。傳統方式對于一些經常使用的程序員來說非常簡便,加上代碼生成工具,使用起來也會游刃有余,但對于新手來說,Fluent絕對是一個好幫手。
四、靈活的Fluent
???? 那我們Fluent就沒有辦法靈活了嗎?當然不,Fluent的開發者不僅幫你保留了原有的方式,還可以混合你的配置文件,最有意思的時,你還可以使用它來學習NHibernate,甚至可以使用它來開發你自己的自動代碼生成工具,因為我也剛學,先介紹一些簡單的,至于其他功能,希望大家也能跟我一起學習,體驗Fluent帶來的快感。
使用NHibernate的配置
???? 也就是你可以按照原先的方式進行配置,而讀取呢使用Fluent來讀取,然后創建SessionFactory,或許你感覺這不是多余了嘛,那是因為還沒有講到Mapping,這里我們先介紹一下,如果用Fluent結合傳統的配置文件,來創建SessionFactory(后面的代碼會簡略,只修改上面其中的創建方法)。
private static ISessionFactory CreateSessionFactory() { return Fluently.Configure(new NHibernate.Cfg.Configuration().Configure()).BuildSessionFactory(); }折疊代碼哈哈,簡單吧,我們使用了原先的配置文件,然后用Fluent進行創建,而且我們可以為配置文件中沒有的配置進行擴展。折疊代碼原本打算把Fluent學習的方法說一下,后來一看,必須要先說Fluent的Mapping才能說到這個,所以暫時先不說了,等到下一章映射的部分再一起來說。折疊代碼文章寫得很爛,也當是筆記吧,NHibernate也是剛剛學,慚愧慚愧,學的不是很徹底,今后也會結合NHibernate的學習一起來說。折疊代碼-----------------------------------------------------
??????網名:James.Ying(玄天尊)
??????MSN:x_inday@msn.com
??????經驗:5年電子商務網站開發
??????目標:電子商務平民化。
轉載于:https://www.cnblogs.com/aaa6818162/archive/2012/04/10/2439899.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的Fluent NHibernate之旅的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mssql性能优化[转](教你写出高质量
- 下一篇: 实现pick和reigister