You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Visual Studio 2019 WPF .NET Framework 4.8下通过ADO.NET接入SQLite问题求助

VS2019 ADO.NET EF6 接入SQLite 配置解决方案

第一步:清理冲突依赖

首先卸载项目中多余的冲突包:

  • 卸载 Stub.System.Data.SQLite.Core.NetFramework 包,该包为跨平台兼容桩文件,纯.NET Framework 项目无需引入,会导致运行时程序集加载冲突
  • 确认剩余所有 System.Data.SQLite 相关包版本统一,当前你安装的1.0.115版本与EF6 6.4.4版本兼容,无需更换版本

第二步:修正应用配置文件

在项目的 App.config(桌面项目)或 Web.config(Web项目)中添加以下必要配置节点,覆盖默认生成的不完整配置:

<!-- 1. 数据库连接字符串,替换为你实际的数据库文件名 -->
<connectionStrings>
  <add 
    name="SQLiteDbContext" 
    connectionString="data source=./你的数据库文件名.db" 
    providerName="System.Data.SQLite.EF6"
  />
</connectionStrings>

<!-- 2. EF6 提供者注册 -->
<entityFramework>
  <providers>
    <provider 
      invariantName="System.Data.SQLite.EF6" 
      type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6"
    />
  </providers>
</entityFramework>

<!-- 3. ADO.NET 驱动工厂注册,避免全局配置冲突 -->
<system.data>
  <DbProviderFactories>
    <!-- 先移除可能已存在的同名注册,避免冲突 -->
    <remove invariant="System.Data.SQLite.EF6" />
    <add 
      name="SQLite EF6 数据提供程序" 
      invariant="System.Data.SQLite.EF6" 
      description=".NET Framework SQLite EF6 数据驱动" 
      type="System.Data.SQLite.EF6.SQLiteProviderFactory, System.Data.SQLite.EF6"
    />
    <!-- 如果需要用原生ADO.NET而非EF6操作数据库,额外添加以下注册 -->
    <remove invariant="System.Data.SQLite" />
    <add 
      name="SQLite 核心数据提供程序" 
      invariant="System.Data.SQLite" 
      description=".NET Framework SQLite 核心数据驱动" 
      type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite"
    />
  </DbProviderFactories>
</system.data>

第三步:项目属性调整

  • 右键项目→属性→生成,将平台目标改为x86或x64,不要使用Any CPU,SQLite包含原生驱动组件,Any CPU架构下会找不到对应版本的驱动文件
  • 右键项目中存放的.db数据库文件→属性,将复制到输出目录选项改为如果较新则复制,避免运行时程序找不到数据库文件
  • 编译项目后检查输出目录(bin/Debug或bin/Release)下是否存在x86/x64文件夹,且对应架构文件夹下存在SQLite.Interop.dll文件,若不存在可从对应版本的NuGet包目录中手动复制到输出目录

第四步:代码实现(无需设计时组件)

官方已停止支持VS设计时组件,无需尝试使用实体数据模型向导生成代码,直接手动编写上下文和实体类即可:

// 自定义数据库上下文类
public class MyDbContext : DbContext
{
    // 构造函数关联配置文件中的连接字符串名
    public MyDbContext() : base("name=SQLiteDbContext")
    {
        // 可选:关闭数据库自动创建/迁移逻辑,SQLite EF6不支持自动迁移
        Database.SetInitializer<MyDbContext>(null);
    }

    // 替换为实际的实体类映射
    public DbSet<User> Users { get; set; }
}

// 示例实体类
[Table("users")]
public class User
{
    [Column("id")]
    public int Id { get; set; }
    [Column("name")]
    public string Name { get; set; }
}

内容的提问来源于stack exchange,提问作者Franck E

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 11:09:03