一、背景 ABP的各類文檔在網路上已經非常完善了,唯獨缺少與oralce相關的資料,ABP官網也未給出一個較好的Oracle解決方案。正好最近在學習ABP相關知識,對ABP源碼結構稍算熟悉,花了些時間進行ABP適配Oracle。 二、準備 "ABP官 ...
一、背景
ABP的各類文檔在網路上已經非常完善了,唯獨缺少與oralce相關的資料,ABP官網也未給出一個較好的Oracle解決方案。正好最近在學習ABP相關知識,對ABP源碼結構稍算熟悉,花了些時間進行ABP適配Oracle。
二、準備
ABP官網 下載ABP模板(選擇.netframework MVC 版本)
github 下載源碼
資料庫:Oracle 11g
開發工具:vs2017
三、鏈接Oracle
前期工作都準備好後,開搞開搞!!
1、Oracle EF 驅動
分別在web和EntityFramework添加oracle ef 引用(install-package Oracle.ManagedDataAccess.EntityFramework),直接安裝該包會自動添加ODP.Net引用
2、鏈接oracle
oralce依賴添加好後,我們會發現web.config自動添加了oracle連接配置,將我們需要鏈接的資料庫加到上面去(ps:oracle的鏈接字元必須為完整) 配置好資料庫鏈接後,直接運行程式試試看,出現瞭如下錯誤
3、數據遷移
既然使用了EF,數據遷移必然少不了,通過執行Add-Migration和update-database指令,查看oracle資料庫里生成出來的數據表都是區分大小寫(註入AbpModules)。通常而言,我們在plsql建數據表,oracle會自動建表名和欄位名轉為大寫
顯然code-first生成出來的數據表不是我們想要的,那我們要怎麼修改呢?此時,就需要引入源碼,進行源碼改造。
四、源碼改造
1、重寫表名和欄位名
將需要的ABP源碼引入,並修改對應依賴
找到ABP.Zero.Common類庫,改寫實體,通過特性將所有映射到資料庫的實體名和屬性名改為大寫。
修改完後,通過數據遷移將數據表生成到資料庫中,得到如下數據表
2、源碼改造
僅僅只是重寫表名和欄位名遠遠達不到我們實際的應用需求,oracle 11g 主鍵無法自增,ABP預設主鍵都是int 自增。這導致無法使用ABP預設的許可權管理模塊,那麼我們需要將所有表的主鍵都修改為string,然後只需要根據程式報錯提示進行修改。(ps:主鍵此時非自增類型,需要賦值)
五、End
源碼改造完後,重新進行數據遷移。運行程式,正常顯示登錄界面,但無法登錄,這是因為數據遷移時,部分種子數據無法正常寫入到資料庫,暫時手工寫入基礎數據。輸入admin/123qwe後,正常顯示主界面,角色管理、租戶管理等菜單未顯示,跟蹤後臺發現是許可權角色無法取到值,後續待完善。