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
相关产品推荐
相关产品推荐

