设置项目以将 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 数据库。