OpenAccess快速入門01
接下來幾篇 OpenAccess 快速入門將協助我們熟悉 OpenAccess,第一篇我們要先來建立資料庫和模型。
實務上,幾乎都是先建立了資料庫的實體結構後,才會在程式中應用 ORM 技術,所以我們的練習亦採此做法。首先,請建立在 Oracle 中,建立北風資料庫(Northwind)。北風資料庫是微軟的在 MS Sql 上的範例資料庫,當然沒有提供 Oracle 版本,我做了一份放在分享空間,有需要的人請自行下載 SQL Script,新增到 Oracle 中。
OracleNorthwind Sql Shared – skydrive 空間
※為了搞這份 Script,花了快兩天的時間搞定 Oracle SQL Developer,結果移轉到 Oracle 的功能有問題,一直出現 Null Exception,只好又花一天時間,手動把 Script 處理起來,請大家珍惜啊。
成功新增完,我們可以用 Oracle Sql Developer/Toad/PlSql Developer 或 sqlplus.exe 工具,查詢一下資料庫:
接下來,我們使用前面已經建立好的 OpenAccessWebApp01 方案,進入 OpenAccessWebApp01Model 這個專案,把 FirstModel.rlinq 檔案刪掉,重新加入新項目,選擇【Telerik OpenAccess Domain Model】,名稱為「SecondModel」:
稍待片刻,會出現我們已經見過一次的『Select OpenAccess Domain Model Type』畫面,這次,我們選擇從資料庫中產出模型資料,所以請選擇【Populate from database】,並設定【Backend】為「Oracle」後,按【Next】鈕:
接著是『Setup Database Connection』畫面,第一次進來,【Connection】應該都是空白的,這是請按【Add New Connection】鈕,建立一個新的連線:
這裡比較有趣的狀況是,我在 Windows 8 x64 的環境下,不管是用 Oracle 官方的 Setup 安裝 Oracle Client,還是透過 XCopy 的 install.bat 安裝 Oracle ODP.Net,在資料來源都只能看到 OracleClient,按【變更】鈕,也找不到 Oracle Data Provider:
不過我們可以發現,在【描述】中有寫說「這個提供者已被取代,不可使用。」這真的是很妙的描述,如果不用這個,我就沒其他選擇了啊!所以,請大家還是選它吧,我實測並不影響後續的作業(稍後在 app.config 可以看分明),所以大家就直接在【伺服器名稱】輸入正確的 TNS Name,並輸入連線帳號和密碼後按【測試連接】鈕。理論上,只要我們電腦有正確的安裝 Oracle Client 及 ODP.Net,TNS 名稱沒打錯,應該都可以順利完成測試:
請注意,OpenAccess 一定要透過 ODAC 元件(也就是 ODP.Net)才能建立 Oracle 資料庫連線,所以若您尚未安裝,請務必下載安裝。這裡補充一個重點,安裝 Oracle Client 時,不可以使用【快速從屬端】的類型,因為這類型不含 OPD.Net,若外,若使用【自訂】類型,也請務必要勾選『Oracle Data Provider for .Net』:
回到『Setup Database Connection』畫面,調整一下要連線字串的名稱,按【Next】鈕:
順利的話,應該會看到正在載入 DB 的 Schema,但是也有可能很不幸的出現以下的訊息:
第一次遇到時,搞的我焦頭爛額,花了好幾天的時間才搞清楚來龍去脈。這部分會在後續文章再說明,因為這和連線字串的設定有關聯。
現在,我們繼續走正常流程。順利載入 DB Schema 後,我們就把所有北風資料庫的 Tables 全勾選起來,包含資料庫預先做好的一些 Store Procedure 也可以勾選加入模型:
勾好了,按【Next】鈕進入已經看過的設定畫面:『Define Naming Rules』。這裡我把 Class 的命名規則調成去除底線,且單字的首字大寫,這樣看起來比較順眼,然後私有欄位名稱就設為 Camel 模式,且不移除底線,屬性則完全不要異動,保持 DB 原有的命名規則。
會這樣設定其實也是基於過去接觸到的 Oracle Table,常常會發生同一個資料表中,出現 USER_ID 和 USERID 兩個只有底線不一樣的欄位名稱,若去底線就變成名稱重覆,也有去掉底線後會變成 .Net 關鍵字的狀況(例如:C_DATE –> CDate),所以私有欄位和屬性最好不要移掉底線,但類別名稱(對應資料表名稱)不會有這個狀況。
設定完就按【Next】鈕,最後『Code Generation Settins』畫面,我們就把【Project Folder】指到「Entities」目錄下,並按【Finish】鈕完成建立模型的作業: