OpenAccess的核心:*.rlinq
本文將簡介 OpenAccess的核心:*.rlinq 的結構。
OpenAccess ORM 的核心,就是 *.rlinq,也就是所謂的 Model。在 VS2012 中,我們會透過視覺化設計畫面來建立內容,但其實 rlinq 是一個 XML 格式的檔案,所以我們可以用文字編輯器開啟它,檢視其內容。為了方便說明,我們就使用前一篇文章,最後的範例畫面之 rlinq 來解說結構。
開始說明前,您是不是有疑惑:為什麼我們需要知道 rlinq 結構?透過視覺化設計不就可以搞定一切了嗎?
答案是:【理論上】透過視覺化設計的確可以完成 Model 的設定,但【實際】應用時,偶爾還是要用文字編輯器處理一下 rlinq 檔案,例如:從 Model 中移除 Entity 但 rlinq 中沒有清除乾淨,就必須手動清,或者為無主鍵的 Table 設定物件識別屬性。
※ 純文字編輯器我都是用 Notepad++,因為可以著色和收合程式碼區塊,內建的記事本太難用了。
另一個問題:要了解到多細節?
其實不需要了解到很細節,因為太細節的部分手動調整通常一定會錯!主要還是在了解 ORM 的部分。ORM 框架最重要的就是把 DB Schema 和 Class Object 對應起來,所以在 rlinq 中,一定會有這個部分,這就是我們要了解的地方。
好,現在用文字編輯器開啟上圖所對應的 rlinq 檔,先看大範圍:
可以發現,分別四個區塊:
● <orm>:重點區塊,記錄 DB Schema 和 Class Object 的對應關係和欄位、屬性的對應,還包含了型別的對應。
● <ModelSettings>:顧名思義,就是我們在建立 rlinq 時所做的相關設定。這個區段只有一個地方要注意,就是裡面會有連線字串。
● <Types>:每個 Entity 的屬性(Attritube)資料。
● <domainContext>:記錄 Model 中有那些 Entity。
所以最重要的部分,其實就是 <orm>。這區塊下還可以再看到子階層:
● <orm:class>:Model 中的 Entity Class 資料,以及此 Entity 所對應的 DB Schema。
● <orm:schema>:DB Schema 的資料。
● <orm:relational-naming-settings>:欄位的命名規則,也就是我們在建立 Model 時所設定資料。
所以很重要的地方,就是 orm:class 和 orm:schema。以下為了方便說明,我只保留 LEO_USER 資料表的 USR_ID 和 NAME 兩個欄位:
應該可以明顯發現,在 <orm:schema> 區塊下,很單純就是記錄 DB 資料表名稱,以及資料表的 Column 型別和相關屬性。
在 <orm:class> 這區塊下,就比較重要了:
● <orm:table>:Entity 所對應的 DB Table。
● <orm:identity>:Entity 的識別屬性。
● <orm:field>:Entity 物件的屬性資料,子階層 <orm:column> 則是標記這個屬性所對應的 DB Table Column。
上圖中我故意還保留了一個 Leodept 的屬性,它有一個子階層是 <orm:reference>,表示這個欄位其實是一個外部關鍵主鍵(Foreign Key),所以在 uniqueId 中的值就是就是另一個 Entity 的 uniqueId,<orm:sharedfield> 就是指明關聯 Entity 的主鍵(Primary Key)名稱。
行文至此,rlinq 的結構大致分析完了,只剩下一個地方還沒說明,就是圖上兩個 Entity 的關聯資料(一對多、一對一等關係),是儲存在那裡?
答案是:<Types><DomainClass>下的<AssociationTargets>和<navigationalProperties>區塊。
另外,再追加說明一個地方,*.rlinq.diagram 也是一個 xml 格式檔案,記錄的是要呈現在畫面上的各物件之座標,我沒特別研究它,而且通常改了就會造成視覺化設計工具出錯,所以看看就好,別去動它囉: