設定專案以將 Entity Framework 與 SQLite 提供程式一起使用
實體框架庫僅隨 SQL Server 提供程式提供。要使用 SQLite,需要額外的依賴關係和配置。NuGet 上提供了所有必需的依賴項。
安裝 SQLite 託管庫
可以使用 NuGet 包管理器控制檯安裝所有 mananged 依賴項。執行命令 Install-Package System.Data.SQLite
。
如上所示,在安裝 System.Data.SQLite
時,所有相關的託管庫都隨之安裝。這包括 System.Data.SQLite.EF6
,SQLite 的 EF 提供者。該專案現在還引用了使用 SQLite 提供程式所需的程式集。
包括非託管庫
SQLite 託管庫依賴於名為 SQLite.Interop.dll
的非託管程式集。它隨隨 SQLite 包一起下載的程式包一起提供,並在構建專案時自動複製到構建目錄中。但是,因為它不受管理,所以它不會包含在你的參考列表中。但請注意,此程式集大多數與 SQLite 程式集的應用程式一起分發。
注意:此程式集與位有關,這意味著你需要為計劃支援的每個位包含特定的程式集(x86 / x64)
編輯專案的 App.config
在將 SQLite 用作實體框架提供程式之前,app.config
檔案需要進行一些修改。
必需的修復
安裝軟體包時,app.config
檔案會自動更新,以包含 SQLite 和 SQLite EF 的必要條目。不幸的是,這些條目包含一些錯它們需要在正常工作之前進行修改。
首先,在配置檔案中找到 DbProviderFactories
element。它位於 system.data
元素內,包含以下內容
<DbProviderFactories>
<remove invariant="System.Data.SQLite.EF6" />
<add name="SQLite Data Provider (Entity Framework 6)" invariant="System.Data.SQLite.EF6" description=".NET Framework Data Provider for SQLite (Entity Framework 6)" type="System.Data.SQLite.EF6.SQLiteProviderFactory, System.Data.SQLite.EF6" />
<remove invariant="System.Data.SQLite" /><add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".NET Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" />
</DbProviderFactories>
這可以簡化為包含單個條目
<DbProviderFactories>
<add name="SQLite Data Provider" invariant="System.Data.SQLite.EF6" description=".NET Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" />
</DbProviderFactories>
有了這個,我們已經指定 EF6 SQLite 提供者應該使用 SQLite 工廠。
新增 SQLite 連線字串
可以將連線字串新增到根元素中的配置檔案中。新增用於訪問 SQLite 資料庫的連線字串。
<connectionStrings>
<add name="TestContext" connectionString="data source=testdb.sqlite;initial catalog=Test;App=EntityFramework;" providerName="System.Data.SQLite.EF6"/>
</connectionStrings>
這裡需要注意的重要事項是 provider
。它已被設定為 System.Data.SQLite.EF6
。這告訴 EF 當我們使用這個連線字串時,我們想要使用 SQLite。指定的 data source
只是一個示例,它將取決於你的 SQLite 資料庫的位置和名稱。
你的第一個 SQLite DbContext
完成所有安裝和配置後,你現在可以開始使用適用於你的 SQLite 資料庫的 DbContext
。
public class TestContext : DbContext
{
public TestContext()
: base("name=TestContext") { }
}
通過指定 name=TestContext
,我已經指出應該使用位於 app.config
檔案中的 TestContext 連線字串來建立上下文。該連線字串配置為使用 SQLite,因此該上下文將使用 SQLite 資料庫。