當前位置:電腦軟件 > 編程開發 > 編程軟件 > NHibernatev5.2.3

NHibernatev5.2.3

大?。?0.59MB語言:英文類別:編程軟件

類型:國外軟件授權:免費軟件時間:2024/1/10

官網:

環境:Windows10,Windows8,Windows7,WinVista,WinXP

安全檢測:無插件360通過騰訊通過金山通過瑞星通過

本地下載

NHibernate是一款面向.NET環境的對象/關系數據庫映射工具。提供了將域模型(類)映射到傳統關系數據庫并生成查詢所需的框架。它的目標主要是用于與數據持久化相關的編程任務,大幅度減少開發時人工使用SQL和ADO.NET處理數據的時間。能夠使開發人員從原來枯燥的SQL語句的編寫中解放出來,解放出來的精力可以讓開發人員投入到業務邏輯的實現上。
NHibernate

相關配置

一、基本配置
1、需要一個自定義的配置節點,一般放在Web.config里或App.config里面,當然你可以自己定義實際位置

(1)、聲明自定義配置節點
  name:自定義配置節點名稱。
  type:處理程序位置。
(2)、聲明是哪一個數據庫驅動程序。
(3)、數據庫連接。
(4)、所使用的SQL方言,通過這個方言,才知道要將你寫的查詢語句,翻譯成何種數據庫的SQL語句。
(5)、設定映射文件默認所在的程序集。
2、軟件的映射文件一定要設為嵌入的資源。
3、軟件的實體類所有的屬性都要加上virtual-虛屬性,作為一個ORM框架,它需要知道如何將數據庫的表與對應的實體類相關聯,通過映射文件的方式來獲得這方面的信息。
二、獲取映射文件相關配置
軟件中的映射文件以hbm.xml為后綴結束,獲取映射文件的方法有3種方法:
1、從config程序配置文件獲取映射文件位置
運行在.Net程序上,需要自己提供一個自定義配置節點,這個配置節點里面包含了數據庫連接,什么數據庫等等信息。其中就包括了配置文件所在位置的信息。
會直接從Web.config或App.config文件上的配置節點上讀取這個節點,然后從節點指定的程序集去查找映射文件。
2、編程的方式,寫在代碼里

(1)、AddFile 指定映射文件
ISessionFactory sessionFactory = new Configuration().Configure().AddFile(@"C:UsersAdministratorDesktopNHibernate學習ModelMappingPerson.hbm.xml").BuildSessionFactory();
ps:當你不寫全路徑的時候,也就是只寫個文件名,那么它就會從配置文件讀取程序集,到配置文件中指定的程序集去加載此映射文件。如果配置文件并不指定程序集,那么就從當前程序集中查找指定名的映射文件。但這種方式,不必設置嵌入的資源,但要記得設置為始終復制。
Configuration cfg = new Configuration().AddFile("Mapping/Person.hbm.xml");ISessionFactory sessionFactory = cfg.BuildSessionFactory();
這種方法只是指定一個文件,但是可以鏈式指定多個如:AddFile("f1").AddFile("f2")。
(2)、AddAssembly
還有另外一種方法,在創建Configuration時指定程序集。
Configuration cfg = new Configuration().AddAssembly("Model");       //Model為映射文件所在程序集名稱
 ISessionFactory sessionFactory = cfg.BuildSessionFactory();
這種方法,即使.config配置文件里節點為空也沒關系,軟件會自動到指定的程序集里查找所有以.hbm.xml結尾的文件。
(3)、AddClass
這種方式,可以消除程序對文件路徑字符串的硬編碼。
Configuration cfg = new Configuration().AddClass(typeof(Model.Person));
ISessionFactory sessionFactory = cfg.BuildSessionFactory();
但是缺點也非常明顯,類名必須與映射文件的名稱相同。不然,編譯就無法通過,因為Person類都找不到。另外,映射文件Person.hbm.xml必須放在根目錄。會自動到程序中去查找名為Person.hbm.xml文件。

使用方法

步驟一、創建數據庫和映射的表

步驟二、創建項目和實體類映射類以及類對應的映射文件
新建一個網站,網站創建之后,網站解決方案右鍵,選擇添加 => 新建項目 => 類庫

給類庫起名

與之前寫的實體類不同的是此實體類每個屬性前面就加了virtual,虛方法或者屬性的關鍵字,子類可以從新定義(override),在這里必須有virtual 關鍵字,不然程序運行就會出錯。筆者判斷此原因可能是程序在運行時候此屬性被重新映射(定義),所以必須添加virtual關鍵字。
然后比較重要的一個步驟就是配置此實體類對應的映射文件,此映射xml文件名稱固定為“實體類.hbm.xml”

實體類的屬性配置,其中“Com.uuu9.nHibernate”為上述所建類庫(生成程序集的名稱)的名稱。注意:每個實體類對應的映射文件“實體類.hbm.xml”,都要右鍵設置生成類型屬性為:嵌入的資源

因為當作為一個資源被嵌入后,項目的默認命名空間與文件名就組成了資源訪問的完整名稱,軟件運行時會訪問資源的完整名稱,但如果不設置,程序就找不到映射文件,就會認為此類沒有設置映射,也就不能使用操作。
步驟三、添加項目引用與NHibernate(版本2.1.2)的dll文件

步驟四、配置hibernate.cfg.xml文件(數據庫映射信息配置)
hibernate.cfg.xml文件為NHibernate的配置文件,名稱固定,且必須放到Bin目錄中

name可以自己隨意定義:NHibernate.Dialect.MsSql2005Dialect
“NHibernate.Dialect.MsSql2005Dialect”可根據實際的數據庫的需要改為 2000Dialect、2008Dialect。
注意:“”為實體類生成程序集的名稱,一直要寫正確,一定要有。
步驟五、創建和使用NHibernate

至此NHibernate制作完畢。

體系結構

1、SessionFactory(NHibernate.IsessionFactory):它是Session的工廠,是ConnectionProvider的客戶??梢猿钟幸粋€可選的(第二級)數據緩存,可以在進程級別或集群級別保存的可以在事物中重用的數據。
2、會話(NHibernate.ISession):單線程,生命期較短的對象,代表應用程序和持久化層之間的一次對話。封裝了一個ADO.NET連接,也是Transaction的工廠。保存有必需的(第一級)持久化對象的緩存,用于遍歷對象圖,或者通過標識符查找對象。
3、持久化對象(Persistent)及其集合(Collections):生命期較短的單線程的對象,包含了持久化狀態和商業功能。這些可能是普通的對象,唯一特別的是現在從屬于且僅從屬于一個Session。一旦Session被關閉,它們都將從Session中取消聯系,可以在任何程序層自由使用(比如,直接作為傳送到表現層的DTO,數據傳輸對象)。
4、臨時對象(Transient Object)及其集合(Collection):目前沒有從屬于一個Session的持久化類的實例。這些可能是剛剛被程序實例化,還沒有來得及被持久化,或者是被一個已經關閉的Session實例化。
5、事務Transaction (NHibernate.ITransaction):(可選)單線程,生命期較短的對象,應用程序用其來表示一批工作的原子操作,它是底層的ADO.NET事務的抽象。一個Session在某些情況下可能跨越多個Transaction事務。
6、ConnectionProvider(NHibernate.Connection.ConnectionProvider):(可選)ADO.NET連接的工廠。從底層的IDbConnection抽象而來。對應用程序不可見,但可以被開發者擴展/實現。
7、TransactionFactory(net.sf.hibernate.TransactionFactory):(可選)事務實例的工廠。對應用程序不可見,但可以被開發者擴展/實現。

常見問題

處理字段NULL值的問題
因為 birthday 在數據庫里是“smalldatetime”類型,所以我們在創建表實體、以及xml映射的時候,可能會把 birthday 的類型設置為“DateTime”。但是經過這樣的設置后,可能會出現以下錯誤提示:
SqlDateTime 溢出。必須介于 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM 之間。 
說明: 執行當前 Web 請求期間,出現未處理的異常。請檢查堆棧跟蹤信息,以了解有關該錯誤以及代碼中導致錯誤的出處的詳細信息。 異常詳細信息: System.Data.SqlTypes.SqlTypeException: SqlDateTime 溢出。必須介于 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM 之間。
解決方法:
 當庫中的字段為 DateTime 類型的時候,我們在創建表實體、以及xml映射的時候,應該將類型設置為“String”。
下載地址

有問題?點擊報錯+投訴+提問

網友評論

0條評論

評分:
captcha 評論需審核后才能顯示
欧美一级一极性活片免费观看,欧美一级艳片欧美精品,欧美一级性爱大片,欧美一级囗交视频 视频,欧美一级特黄录像视频