iT邦幫忙

3

OpenAccess ORM for Oracle 實戰演練 Day 06

OpenAccess快速入門03
OpenAccess 快速入門將協助我們熟悉 OpenAccess,第三篇我們進一步研究 OpenAccess ORM 的物件服務核心。
OpenAccess 透過資料物件模型,對應實體資料庫結構,讓開發人員將資料存取的焦點放在物件實體(Entity)上,不需要再多花費心力去撰寫 SQL。能夠這樣做的原因,靠的就是 OpenAccess 的物件容器:OpenAccessContext。

回到前一章的 VerifyRLinq.vb,在類別建構式中,我們就有建立物件容器喔:

Public Sub New()
    cxt = New SecondModel()
End Sub

事實上,SecondModel 就是 OpenAccessContext 的子類別,我們移到 SecondModel 的定義看看:

除了看到 Inherits OpenAccessContext 外,我們還可以看到幾個值得注意的地方:
● Implements ISecondModelUnitOfWork:我們可以透過 OpenAccessContext 取得所需的資料物件集合,靠的就是實作這個介面。

● Private Shared connectionStringName:OpenAccessContext 另一個重要的任務,就是定義並建立底層資料來源的連線,所以這裡指明的,就是在組態檔中的連線字串之 Key 值。
● Private Shared backend:還記得我們在那裡有看過 backend 嗎?是的,就是建立模型時,一開始選擇建立空的或是從 DB 產出的『Select OpenAccess Domain Model Type』畫面。當時選擇的設定是 Oracle,這裡就會建立一個對應的 BackendConfiguration 類別:

● Private Shared metadataSource:這欄位記錄的是從『編譯後的組件』中讀取出來 rlinq 的資料。注意,『編譯後的組件』表示,在建置專案時,rlinq 檔案必須被編譯到組件中才行。但是 rlinq 是 OpenAccess 特有的格式,如何把他編譯到組件中呢?
這是一個進階的課題,預設的情況下,我們不需要擔心這件事,但如果現在要編譯的環境沒有安裝 OpenAccess,執行時期這裡就會出 Exception 囉!解法當然有,日後在撰寫部署主題時,再進一步說明,現在大家只要記得,rlinq 是 OpenAccess 專有的格式,必須在有安裝 OpenAccess 的環境中才能編譯,否則執行時期會出現錯誤。
※請注意,不要手動調整上述類別中的任何程式,因為這是透過 T4 自動產生的類別,手動調整除了有可能造成不可預期的錯誤,在存檔時若有重新呼叫 T4 範本,所做的調整也會被覆蓋掉。

關於建立 OpenAccessContext 的方式
在大部分的情況下,我們都會以無參數的方式建立一個 OpenAccessContext 子類別實體(以本例來說,就是 SecondModel 類別),但實際上,建立一個 OpenAccess 物件容器的實體有好幾種方法:

無參數的建構式,其實就是透過剛剛說明過的三個 Private Shared 欄位資料來建立一個物件容器,但事實上,我們也可以在建立物件容器時,自行指定連線字串或資料庫組態設定(Backend),甚至 rlinq 的內容。這樣多載的行為,提供開發人員很大的彈性,例如:單元測試時,我們可以把資料庫連線改到測試資料庫,甚至可以換成不同的底層資料庫。


尚未有邦友留言

立即登入留言