文章目錄
使用 Entity Framework 連線 Oracle - Database First
之前工作一直使用 Entity Framework 加速專案開發速度,主要是因為過去公司都使用 MS-SQL,與 Entity Framework 整合度很高,配合 Visual Studio Scaffolding 功能,可以很迅速地將專案骨架展開,讓工程師可以直接進入商業邏輯及其他需求功能開發,是非常方便好用的工具,但 Entity Framework 有不少缺點:像是無法控制轉譯後的 SQL 及預設的 change tracking 讓資料使用情境的效能大降都使得不少人卻步
最近為了加速專案開發,打算透過 Entity Framework 搭配 Oracle 先長出專案的主框架,過程中遇到不少問題,順手紀錄一下
環境說明
- Visual Studio 2017
- Entity Framework 6
- .Net Framework 4.6.2
- Oacle 11g XE
- Windows 10
安裝 Oracle Developer Tools for Visual Studio
請至 Oracle 官網下載對應的版本 Oracle Data Access Components (ODAC) for Windows Downloads,下列示範將使用 Oracle Developer Tools for Visual Studio 2017 - MSI Installer,這會加入 Oracle Data provider,讓 Entity Framework 能與 Oracle 溝通
安裝前
安裝後
如果這邊看不出用途沒關係,後面會有更詳細的說明,記得先安裝就對了
安裝 Oracle Driver
安裝 Oracle.ManagedDataAccess.EntityFramework
支援 Entity Framework 6,順帶安裝的 Oracle.ManagedDataAccess
則是 oracle 官方的 data provider
加入 ADO.NET Entity Data Model (.edmx)
在
Model
加入新項目專案
Model
資料夾上按右鍵 –> Add –> New Item…選擇
ADO.NET Entity Data Model
Data –> ADO.NET Entity Data Model
選擇 Model 內容
設定連線資料
選擇要轉換為 model 為資料庫物件
儲存
.edmx
並重新編譯
使用 Scaffolding 產生程式碼
加入 Controller
Controllers
資料夾上按右鍵 –> Add –> Controller…選擇 Scaffold template
選擇 model、context 並指定名稱
可能問題
無法使用 Entity Framework 6
An Entity Framework database provider compatible with the laest version of Entity Framework could not be found for your data connection. If you have already installed a compatible provider, ensure you have rebuilt your project performing this action. Otherwise, exit this wizard, install acompatible provider and rebuild your project before performing this action.
- 預設安裝的 data provider 僅支援 Entity Framework 5.0
- 解決方式:安裝
Oracle.ManagedDataAccess.Entity Framework
無法使用 Scaffolding
Error There was an error running the selected code gernerator: 'Could not load file or assmbly 'Entity Framework, Version=5.0.0.0,Culture=neutual, PublicKeyToken=b77a5c561934e089' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference.(Exception from HRESULT:0x80131040)'
- 重新檢查專案設定,會發現 Entity Framework 被升級為 6.x 版本,建立時說不能用 Entity Framework 6,現在又幫我升級XD
- 解決方式:安裝
Oracle.ManagedDataAccess.EntityFramework
無法使用 Scaffolding
Error There was an error running the selected code generator: 'Unable to retrieve metadata for 'xxxx'.Schema specified is not valid. Errors:.........
.edmx
中定義的型別不正確- 解決方式:重新產生
.edmx
心得
不知道是不是我被微軟養大胃口了,覺得與 Oracle 的整合好麻煩,一下缺東一下缺西的,安裝說明跟錯誤訊息都不是很明確,不是很好 debug,使用體驗很差,明明設定步驟不多,操作也不複雜,但著實花了我一整天才搞定,希望這關過了後面可以順利些
參考資訊
文章作者 Yowko Tsai
上次更新 2021-11-03
授權合約
本部落格 (Yowko's Notes) 所有的文章內容(包含圖片),任何轉載行為,必須通知並獲本部落格作者 (Yowko Tsai) 的同意始得轉載,且轉載皆須註明出處與作者。
Yowko's Notes 由 Yowko Tsai 製作,以創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款 釋出。