您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“C#中NHibernate結(jié)構(gòu)是什么”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
先給小伙伴們放個(gè)圖:
這是NHibernate的整體結(jié)構(gòu)圖。NHibernate通過(guò)ADO.NET 建立訪問(wèn)數(shù)據(jù)庫(kù)的連接,然后封裝了一個(gè)Transaction(事務(wù))工廠和一個(gè)Session工廠。每次操作的時(shí)候,通過(guò)兩個(gè)工廠獲取對(duì)應(yīng)的Session/Transaction示例操作數(shù)據(jù)對(duì)象。
ISessionFactory - NHibernate.ISessionFactory:
一個(gè)基于單數(shù)據(jù)庫(kù)的已編譯的映射緩存,它是持久不變的且線程安全(額,這句話是從它的文檔翻譯過(guò)來(lái)的)。是一個(gè)提供ISession的工廠類,同時(shí)也是一個(gè) IConnectionProvider的客戶端??梢栽O(shè)置一個(gè)在事務(wù)之間的進(jìn)程級(jí)或集群級(jí)的二級(jí)緩存。
ISession - NHibernate.ISession:
一個(gè)單線程、短生命周期的對(duì)象,表示從應(yīng)用程序和數(shù)據(jù)持久化之間一個(gè)連接。一個(gè)ADO.NET連接的封裝,用來(lái)提供ITransaction的工廠。提供了一個(gè)通過(guò)主鍵檢索對(duì)象和導(dǎo)航鏈接查詢對(duì)象時(shí)的一級(jí)緩存。也就是EF Core中的導(dǎo)航屬性。
Persistent Objects and Collections(持久化對(duì)象和集合):
一些單線程、短生命周期對(duì)象其中包含持久化狀態(tài)和業(yè)務(wù)方法。它們可能只是一些普通的POCO,僅僅是與ISession中關(guān)聯(lián)起來(lái)了。只要ISession關(guān)閉了,這些對(duì)象就可以被分離出來(lái)然后可以在應(yīng)用層的任意地方使用。
Transient Objects and Collections(臨時(shí)對(duì)象和集合):
表示臨時(shí)的未被ISession托管的持久化對(duì)象,它們被應(yīng)用層臨時(shí)創(chuàng)建但直到ISession關(guān)閉都不會(huì)被持久化。
ITransaction - NHibernate.ITransaction:
這個(gè)是可選的。表示一個(gè)單線程、短生命周期的對(duì)象,被應(yīng)用程序用來(lái)限制一個(gè)原子的工作單元,基于ADO.NET 的Transaction的抽象。一個(gè)ISession可能會(huì)開(kāi)啟多個(gè)事務(wù),Transaction scopes may be used instead(原話是這個(gè),大意是可以改用事務(wù)作用域)。
IConnectionProvider - NHibernate.Connection.IConnectionProvider:
也是可選的,是一個(gè)用來(lái)創(chuàng)建ADO.NET Connection和Command的工廠?;贒bConnection和DbCommand實(shí)現(xiàn),并非直接暴露給應(yīng)用程序,但是可以由開(kāi)發(fā)者對(duì)其進(jìn)行擴(kuò)展或?qū)崿F(xiàn)。
IDriver -NHibernate.Driver.IDriver:
可選的,驅(qū)動(dòng)接口,用來(lái)封裝隱藏不同ADO.NET 數(shù)據(jù)提供程序之間的不同。例如:參數(shù)化等。
ITransactionFactory - NHibernate.Transaction.ITransactionFactory:
可選的,事務(wù)實(shí)現(xiàn)工廠,不對(duì)應(yīng)用程序公開(kāi),但開(kāi)發(fā)者可以對(duì)其進(jìn)行擴(kuò)展或?qū)崿F(xiàn)。
在NHibernate中,一個(gè)可持久化的對(duì)象有三種不同的狀態(tài),依據(jù)與持久化上下文之間的關(guān)系不同,其中ISession就是一個(gè)持久化上下文。狀態(tài)分為以下三種:
transient 暫存的、臨時(shí)的 該狀態(tài)的對(duì)象并沒(méi)有被持久化上下文捕獲到,簡(jiǎn)單來(lái)講就是剛被創(chuàng)建,還沒(méi)有從數(shù)據(jù)庫(kù)/持久化上下文中獲取到主鍵信息。
persistent 持久化的 該狀態(tài)的對(duì)象表示已經(jīng)被上下文正確獲取到了,持久化上下文能夠監(jiān)控到對(duì)象的變化。持久化上下文中持有一個(gè)指向該對(duì)象的引用。這種狀態(tài)通常是從數(shù)據(jù)庫(kù)中獲取到數(shù)據(jù)或者新建的數(shù)據(jù)附加到了上下文中。
detached 游離態(tài) 該狀態(tài)的對(duì)象是從上下文中分離出來(lái)的,有了數(shù)據(jù)庫(kù)主鍵,曾經(jīng)或現(xiàn)在仍然有一條數(shù)據(jù)庫(kù)記錄與之對(duì)應(yīng)。造成的原因可能有,上下文關(guān)閉了;該對(duì)象是在另一個(gè)上下文中持久化的,它對(duì)于當(dāng)前上下文是游離態(tài)的。
NHibernate中常用的配置
dialect
數(shù)據(jù)庫(kù)方言,表示NHibernate連接的數(shù)據(jù)庫(kù)是什么,該用哪種格式解析關(guān)系映射到數(shù)據(jù)庫(kù)SQL語(yǔ)句
default_schema
默認(rèn)的schema,用來(lái)設(shè)置連接字符串連接的數(shù)據(jù)庫(kù)默認(rèn)的schema。
connection.provider
數(shù)據(jù)庫(kù)連接的提供程序,默認(rèn)是NHibernate.Connection.DriverConnectionProvider. 填繼承自 IConnectionProvider 的實(shí)現(xiàn)類
connection.connection_string
數(shù)據(jù)庫(kù)連接字符串
connection.connection_string_name
數(shù)據(jù)庫(kù)連接字符串的名稱,指的是配置在程序的配置文件中 connectionStrings節(jié)點(diǎn)的數(shù)據(jù)連接字符串。
max_fetch_depth
最大遞歸深度,表示一次查詢中直接加載的導(dǎo)航屬性深度。默認(rèn)是不直接加載導(dǎo)航屬性,基于延遲加載的邏輯,由實(shí)際使用時(shí)才從數(shù)據(jù)庫(kù)中加載數(shù)據(jù)。
show_sql
是否在控制臺(tái)中打印轉(zhuǎn)換的SQL語(yǔ)句,一般在調(diào)試的過(guò)程中會(huì)設(shè)置為true,用來(lái)確認(rèn)生成的SQL是否正確等。
hbm2ddl.auto
該值表示每次ISessionFactory創(chuàng)建的時(shí)候,是否自動(dòng)生成DDL語(yǔ)句并提交數(shù)據(jù)庫(kù)執(zhí)行。默認(rèn)是空,表示不會(huì)強(qiáng)制更新數(shù)據(jù)庫(kù)。有幾個(gè)候選值:create或create-drop、update等。其中create表示每次只創(chuàng)建新增的;create-drop表示每次ISessionFactory創(chuàng)建時(shí)創(chuàng)建表 ,ISessionFactory關(guān)閉時(shí),刪除表;其中update表示每次都會(huì)將DDL SQL更新到數(shù)據(jù)庫(kù)中。(我記得有update,但文檔中沒(méi)有這個(gè)選項(xiàng))
“C#中NHibernate結(jié)構(gòu)是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。