本文并不是去詳細的介紹如何使用NHibernate,而是通過(guò)一個(gè)簡(jiǎn)單的例子來(lái)演示基于NHibernate的三層結構應用程序開(kāi)發(fā)過(guò)程。關(guān)于NHibernate的有關(guān)文檔,DDL已經(jīng)做了漢化,但是由于英文文檔自身就不完善,所以漢化后也是不全。菩提樹(shù)在一篇《NHibernate學(xué)習之路》隨筆中談到了學(xué)習NHibernate遇到的困難,也希望大家把自己在使用NHibernate中的經(jīng)驗和心得能夠共享出來(lái),與大家分享。另外我也是剛開(kāi)始接觸NHiernate,有錯誤之處還請大家指點(diǎn)。
第一步:準備數據表
在這里用一個(gè)最簡(jiǎn)單的例子,有一張關(guān)于的用戶(hù)的表,有編號,姓名,密碼,Email地址和最后一次的登錄時(shí)間幾個(gè)字段。












在.NET中創(chuàng )建一個(gè)NHibernateWebDemo.Model的工程,添加User實(shí)體類(lèi)。




















































































































該文件的命名為User.hbm.xml,并且與User.cs放在同一個(gè)目錄里。設置該文件的生成操作屬性為“嵌入的資源”,這一點(diǎn)要切記。另外,使用編號當作主鍵,由用戶(hù)輸入,所以在映射文件中用assigned。






















在配置文件中,我們要告訴NHibernate所使用的數據庫是什么,以及如何連接該數據庫。
























在這里,編寫(xiě)了兩個(gè)公用的類(lèi),分別進(jìn)行Session的創(chuàng )建和實(shí)體的操作。在這兩個(gè)類(lèi)中用單件模式,來(lái)限制Session的創(chuàng )建。為了做到與具體的應用程序無(wú)關(guān),在這里把程序集的名稱(chēng)作為參數,傳遞給OpenSession()方法??梢园堰@兩個(gè)類(lèi)單獨放在一個(gè)名為Common的工程下,這里先把它們放在DAL層中。這兩個(gè)類(lèi)只是個(gè)人的一種寫(xiě)法,大家可以自行去編寫(xiě)。 

































































































































































































































































































































360docimg_501_
360docimg_502_ }
360docimg_503_
360docimg_504_}
創(chuàng )建一個(gè)名為NHibernateWebDemo.DAL的工程,數據訪(fǎng)問(wèn)層的代碼編寫(xiě)非常簡(jiǎn)單,在創(chuàng )建EntityControl的實(shí)例時(shí),需要把Model的程序集名稱(chēng)作為參數傳入,可以通過(guò)配置文件來(lái)避免程序集名稱(chēng)的硬編碼。
360docimg_506_
360docimg_507_using System;
360docimg_508_
360docimg_509_using System.Collections;
360docimg_510_
360docimg_511_using NHibernateWebDemo.Model;
360docimg_512_
360docimg_513_namespace NHibernateWebDemo.DAL
360docimg_514_
360docimg_515_360docimg_516_360docimg_517_{
360docimg_518_
360docimg_519_ public class UserDAL
360docimg_520_
360docimg_521_360docimg_522_ 360docimg_523_{
360docimg_524_
360docimg_525_ private EntityControl control;
360docimg_526_
360docimg_527_ public UserDAL()
360docimg_528_
360docimg_529_360docimg_530_ 360docimg_531_{
360docimg_532_
360docimg_533_ control = EntityControl.CreateEntityControl("NHibernateWebDemo.Model");
360docimg_534_
360docimg_535_ }
360docimg_536_
360docimg_537_ public void AddUser(User user)
360docimg_538_
360docimg_539_360docimg_540_ 360docimg_541_{
360docimg_542_
360docimg_543_ control.AddEntity(user);
360docimg_544_
360docimg_545_ }
360docimg_546_
360docimg_547_ public void UpdateUser(User user,string Id)
360docimg_548_
360docimg_549_360docimg_550_ 360docimg_551_{
360docimg_552_
360docimg_553_ control.UpdateEntity(user,user.Id);
360docimg_554_
360docimg_555_ }
360docimg_556_
360docimg_557_ public void DeleteUser(User user)
360docimg_558_
360docimg_559_360docimg_560_ 360docimg_561_{
360docimg_562_
360docimg_563_ control.DeleteEntity(user);
360docimg_564_
360docimg_565_ }
360docimg_566_
360docimg_567_ public IList GetAllUsers(string strHQL)
360docimg_568_
360docimg_569_360docimg_570_ 360docimg_571_{
360docimg_572_
360docimg_573_ return control.GetEntities(strHQL);
360docimg_574_
360docimg_575_ }
360docimg_576_
360docimg_577_ }
360docimg_578_
360docimg_579_}
建立NHibernateWebDemo.BLL工程,為了簡(jiǎn)單期間,在業(yè)務(wù)邏輯層中我沒(méi)有做任何的業(yè)務(wù)檢測。
360docimg_581_
360docimg_582_using System;
360docimg_583_
360docimg_584_using System.Collections;
360docimg_585_
360docimg_586_using NHibernateWebDemo.DAL;
360docimg_587_
360docimg_588_using NHibernateWebDemo.Model;
360docimg_589_
360docimg_590_namespace NHibernateWebDemo.BLL
360docimg_591_
360docimg_592_360docimg_593_360docimg_594_{
360docimg_595_
360docimg_596_ public class UserBLL
360docimg_597_
360docimg_598_360docimg_599_ 360docimg_600_{
360docimg_601_
360docimg_602_ public void AddUser(User user)
360docimg_603_
360docimg_604_360docimg_605_ 360docimg_606_{
360docimg_607_
360docimg_608_ UserDAL dal = new UserDAL();
360docimg_609_
360docimg_610_ dal.AddUser(user);
360docimg_611_
360docimg_612_ }
360docimg_613_
360docimg_614_ public void UpdateUser(User user,string Id)
360docimg_615_
360docimg_616_360docimg_617_ 360docimg_618_{
360docimg_619_
360docimg_620_ UserDAL dal = new UserDAL();
360docimg_621_
360docimg_622_ dal.UpdateUser(user,Id);
360docimg_623_
360docimg_624_ }
360docimg_625_
360docimg_626_ public void DeleletUser(User user)
360docimg_627_
360docimg_628_360docimg_629_ 360docimg_630_{
360docimg_631_
360docimg_632_ UserDAL dal = new UserDAL();
360docimg_633_
360docimg_634_ dal.DeleteUser(user);
360docimg_635_
360docimg_636_ }
360docimg_637_
360docimg_638_ public IList GetAllUsers(string strHQL)
360docimg_639_
360docimg_640_360docimg_641_ 360docimg_642_{
360docimg_643_
360docimg_644_ UserDAL dal = new UserDAL();
360docimg_645_
360docimg_646_ return dal.GetAllUsers(strHQL);
360docimg_647_
360docimg_648_ }
360docimg_649_
360docimg_650_ }
360docimg_651_
360docimg_652_}
用戶(hù)界面很簡(jiǎn)單,這里就不給出代碼了,完成后的用戶(hù)界面:
360docimg_653_
聯(lián)系客服