# dotnet mvc 安裝 sqlite 連動 Entityframework,使用db first建立model ###### tags: `程式設計` `C# MVC` `資料庫` ## 免安裝 DB Browser for SQLite 特色:可以直接讀取 SQLite 資料庫 有中文介面 https://sqlitebrowser.org/ 主畫面 ![](https://i.imgur.com/SNtNpdz.png) 新增、編輯資料表定義schema ![](https://i.imgur.com/tj7GIpy.png) 新增、編輯資料列 ![](https://i.imgur.com/oU59Gkc.png) ## 安裝 SqlCeToolbox 和 SQLite in GAC (一台電腦安裝一次就好) Install latest Toolbox Once per Visual Studio edition (daily build at https://github.com/ErikEJ/SqlCeToolbox/wiki/Release-notes ) Install SQLite in GAC 下載 [sqlite-netFx46-setup-bundle-x64-2015-1.0.115.5.exe](https://system.data.sqlite.org/index.html/doc/trunk/www/downloads-unsup.wiki) 並安裝,該台電腦安裝一次即可,其他程式可共用 參考來源 Once per machine. Download the latest sqlite-netFx46-setup-bundle-x86-2015-1.0.xxx.0.exe (from https://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki) Select "Full Installation" Select: Install the assemblies into the global assembly cache - Install VS designer components ## nuget 安裝以下套件 (每個專案要各自安裝) ~~* sqlite (這邊是3.13版)~~ * System.Data.SQLite.SQLite * System.Data.SQLite.EF6 ~~### sqlite (這邊是3.13版) ~~ https://www.nuget.org/packages/SQLite/3.13.0?_src=template~~ ![](https://i.imgur.com/pbjCPvv.png) ### System.Data.SQLite 和 System.Data.SQLite.EF6 System.Data.SQLite 相依於 **enfityframework 6.3以上**,寫這篇的時候,enfityframework繁體中文套件只有6.2,直接升級ef有相容性問題升不上去,因此要 **手動刪掉EntityFramework.zh-Hant 中文套件,才能把ef核心升級上去**(升級之後可以再回頭安裝中文套件不用擔心),升到 ef 6.3 才能安裝這兩個關鍵的元件 System.Data.SQLite.SQLite System.Data.SQLite.EF6 裝 System.Data.SQLite.SQLite 會順便裝這一堆 ``` 正在安裝: SQLitePCLRaw.lib.e_sqlite3.2.0.2 System.Buffers.4.4.0 System.Numerics.Vectors.4.4.0 System.Runtime.CompilerServices.Unsafe.4.5.2 System.Memory.4.5.3 SQLitePCLRaw.core.2.0.2 Microsoft.Data.Sqlite.Core.3.1.4 SQLitePCLRaw.provider.dynamic_cdecl.2.0.2 SQLitePCLRaw.bundle_e_sqlite3.2.0.2 Microsoft.Data.Sqlite.3.1.4 ``` ### 不用安裝 Microsoft.Data.Sqlite 要安裝的是 System.Data.SQLite ( https://www.nuget.org/packages/System.Data.SQLite/1.0.113.1?_src=template ) ,要注意不要安裝到 Microsoft.Data.Sqlite,會有相衝問題,不小心裝到可以從nuget直接移除掉 ## 安裝成功之後 在要建立 Model 的資料夾點選右鍵 > 新增項目 > 在新開的視窗選 [新增 ADO.NET 實體資料模型] (注意下方的名稱不要衝突囉) ![](https://i.imgur.com/rmCGtp8.png) --- 這次的目標是從資料庫生成model,,所以在這個視窗選 [來自資料庫的 EF Designer] ,如果想使用code First的可以用 code first的方式,但在這篇不討論作法 ![](https://i.imgur.com/Rfx2Zmt.png) --- [新增連接] > 資料來源選 [變更] ![](https://i.imgur.com/t8f44Du.png) ![](https://i.imgur.com/b34cgHO.png) 變更資料來源選擇 [SQLite Provider],如果沒有這個選項,代表前面安裝元件有問題,請確認是否都正常安裝了 ![](https://i.imgur.com/hYJW1Et.png) ## 更換web.config的連線字串,使用相對路徑 範例1,在C#程式裡控制 String currentPath = System.IO.Path.GetDirectoryName( Application.ExecutablePath ); ```=C# string relativePath = @"database\myfile.s3db"; string currentPath; string absolutePath; string connectionString; currentPath = System.Reflection.Assembly.GetExecutingAssembly().Location; absolutePath = System.IO.Path.Combine(currentPath,relativePath); connectionString = string.Format("DataSource={0}", absolutePath); SQLiteConnection cnn = new SQLiteConnection(connectionString); ``` 範例2 在web.config 使用 Data Source=|DataDirectory|mydb.db 這樣就代表資料庫在專案資料夾的 /App_Data/mydb.db ```=xml <add name="mainEntities1" connectionString="metadata=res://*/Models.Model1_sqlite.csdl|res://*/Models.Model1_sqlite.ssdl|res://*/Models.Model1_sqlite.msl;provider=System.Data.SQLite.EF6;provider connection string="data source=|DataDirectory|sqlite.db"" providerName="System.Data.EntityClient" /> ``` https://www.itdaan.com/tw/c038ccba03ca68debe5bdd0d97784bf1 ## 參考來源 https://docs.microsoft.com/zh-tw/ef/core/get-started/?tabs=visual-studio https://blog.csdn.net/catshitone/article/details/80320493 https://ronsun.github.io/content/20190907-use-sqlite-with-ef-and-vs2017.html https://github.com/ErikEJ/SqlCeToolbox/wiki/EF6-workflow-with-SQLite-DDEX-provider [研究] NuGet 無法解析相依性。'EntityFramework 6.4.0' 與 'EntityFramework.zh-Hant 6.2.0 條件約束: EntityFramework (= 6.2.0)' 不相容。 http://shaurong.blogspot.com/2019/12/nuget-entityframework-640.html
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up