設定專案以將 Entity Framework 與 SQLite 提供程式一起使用

實體框架庫僅隨 SQL Server 提供程式提供。要使用 SQLite,需要額外的依賴關係和配置。NuGet 上提供了所有必需的依賴項。

安裝 SQLite 託管庫

可以使用 NuGet 包管理器控制檯安裝所有 mananged 依賴項。執行命令 Install-Package System.Data.SQLite

StackOverflow 文件

如上所示,在安裝 System.Data.SQLite 時,所有相關的託管庫都隨之安裝。這包括 System.Data.SQLite.EF6,SQLite 的 EF 提供者。該專案現在還引用了使用 SQLite 提供程式所需的程式集。

StackOverflow 文件

包括非託管庫

SQLite 託管庫依賴於名為 SQLite.Interop.dll 的非託管程式集。它隨隨 SQLite 包一起下載的程式包一起提供,並在構建專案時自動複製到構建目錄中。但是,因為它不受管理,所以它不會包含在你的參考列表中。但請注意,此程式集大多數與 SQLite 程式集的應用程式一起分發。

注意:此程式集與位有關,這意味著你需要為計劃支援的每個位包含特定的程式集(x86 / x64)

編輯專案的 App.config

在將 SQLite 用作實體框架提供程式之前,app.config 檔案需要進行一些修改。

必需的修復

安裝軟體包時,app.config 檔案會自動更新,以包含 SQLite 和 SQLite EF 的必要條目。不幸的是,這些條目包含一些錯它們需要在正常工作之前進行修改。

首先,在配置檔案中找到 DbProviderFactorieselement。它位於 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 資料庫。