如何在 ASP.NET MVC下使用 Sqlite (ASP.NET MVC 5 With Sqlite)
2020-05-27
Sqlite 的方便用過都知道,如何在 ASP.NET MVC 下順利地使用呢?幾項步驟,跟著完成就可以使用!
Env Setup Steps
- Update Visual Studio 2017 (version >= 15.8 )
- Install Toolbox
- Install SQLite in GAC
- Nuget Install System.Data.SQLite
- Setting Web.config
Install Toolbox
藉由 擴充功能和更新 尋找 SQLite Compact Toolbox 後安裝。
Install SQLite in GAC
安裝版本:sqlite-netFx46-setup-bundle-x86-2015-1.0.110.0
安裝時要一併勾選下列選項,否則在使用 EntityFramework 時會出現未安裝正確的 Provider:
System.Data.SQLite Downloads Page
Nuget Install System.Data.SQLite
藉由 Nuget 搜尋 System.Data.SQLite 後安裝。
⚠️ 絕對務必千萬要裝 System.Data.SQLite
,
不要自作主張裝 sqlite
或 Microsoft.Data.Sqlite
,否則人生將會消失一個小時在尋找SQLite Provider (simple for ES6 by ErikEJ)。
⚠️ 要注意 Nuget 安裝的軟體版本必須要小於等於上一步驟 GAC 安裝的版本,否則 EntityFramework 載入資料庫可能發現無法轉型的錯誤。
Setting Web.config
於 Web.config 之 configuration > entityFramework > providers 加入:
<provider
invariantName="System.Data.SQLite"
type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6"
/>
以上完成專案環境設定步驟
Dev Steps
- 確認 sqlite 檔案 (.db) 儲存於 App_Data folder
- Models Folder 加入新增項目 ADO.NET實體資料模型
- 選擇 來自資料庫的EF Designer
- 新增連結,資料連結選擇 SQLite Provider (simple for ES6 by ErikEJ)
- Connection String 輸入 (記得包含 data source = )
開發環境:data source = C:\ProjectName\App_Data\datas.db
正式環境:data source = |DataDirectory|\datas.db
- 新增 Controller Scaffolding
- 選擇 Controller folder right click 新增 > 控制器 並選擇 具有檢視、使用 Entity Framework 的 MVC5 控制器
- 選擇模型類別及資料內容類別
- 編譯完成後驗證結果
- 在 Web.Release.config 加入 對應之 ConnectionName 與 |DataDirectory|\data.db
- 於部署端資料夾設定存取權限
<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<connectionStrings>
<add name="ConnectionName"
connectionString="metadata=res://*/Models.GenericContent.csdl|res://*/Models.GenericContent.ssdl|res://*/Models.GenericContent.msl;provider=System.Data.SQLite.EF6;provider connection string='data source="|DataDirectory|\data.db"'"
xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
</connectionStrings>
</configuration>
常見錯誤
Unable to open the database file
Connection String 沒有正確設定為 data source = |DataDirectory|\datas.db
無法寫入檔案
資料夾的權限設定不足
載入資料庫時無法轉型
檢查 GAC 與 System.Data.SQLite 的版本是否一致。
參考資料
EF6 workflow with SQLite DDEX provider