c# - 带有实体框架的 SQLite:VS2013 中没有可用的 SQLite 数据提供程序
问题描述
Stackoverflow 上有很多关于这个主题的问题。我尝试了大多数建议的答案,但没有一个对我有用。
- 我的设置:Win 7 32 位 + VS2013 更新 5
- 我安装了
sqlite-netFx46-setup-bundle-x86-2015-1.0.108.0.exe
(完全安装) - 然后我创建了一个新的 .NET 4.6 控制台项目
- 然后我安装了 SQLite Nuget 包
- 此外,我在 AnyCPU 中构建了我的项目并在 x86 中进行了另一次尝试
- 然后我尝试添加实体数据模型(添加 -> 新项目 -> ADO.NET 实体数据模型)
无论我选择什么选项(EF 设计器、代码优先),当我尝试创建连接时,都看不到 SQlite 的提供程序。
我的配置文件:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6" />
</startup>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="v11.0" />
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="System.Data.SqlClient"
type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
<provider invariantName="System.Data.SQLite.EF6"
type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
</providers>
</entityFramework>
<system.data>
<DbProviderFactories>
<remove invariant="System.Data.SQLite" />
<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" />
</DbProviderFactories>
</system.data>
</configuration>
我的包配置:
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="EntityFramework" version="6.0.0" targetFramework="net46" />
<package id="System.Data.SQLite" version="1.0.108.0" targetFramework="net46" />
<package id="System.Data.SQLite.Core" version="1.0.108.0" targetFramework="net46" />
<package id="System.Data.SQLite.EF6" version="1.0.108.0" targetFramework="net46" />
<package id="System.Data.SQLite.Linq" version="1.0.108.0" targetFramework="net46" />
</packages>
编辑:添加屏幕截图以澄清问题:
我做错什么了 ?谢谢你的帮助 !
解决方案
好的,我刚刚弄清楚发生了什么。我只是没有安装正确的提供程序。我应该安装sqlite-netFx451-setup-bundle-x86-2013-1.0.108.0.exe
在 System.Data.SQLite wiki 中不是很清楚,但是文件名中的年份不是我想的发布日期,而是 VisualStudio 版本。我的错误是通过所需的目标 .NET 版本选择提供程序。
一旦安装了正确的提供程序,一切都很好,即使提供程序的目标是 .NET 4.5.1 而我的项目目标是 .NET 4.6
推荐阅读
- apache - 如何将输入的子文件夹设置为 root?
- javascript - 发送邮件不适用于复制的数据列表
- php - 从带有选项的数据库中选择
- nlp - ImportError:无法从“transformers.models.auto.modeling_auto”导入名称“auto_class_factory”
- reactjs - React-native navigation // 将特定的抽屉菜单移动到标题栏右键并隐藏与移动按钮链接的底部菜单
- javascript - 如何在 cypress 中启动动态 url 链接?
- javascript - 添加轮播幻灯片库
- laravel - 是否有一个请求/验证规则会在意外输入的情况下引发错误?
- sql - 比较前两行并识别同一表中值不同的列
- gdb - 分析不同机器上的 Linux 核心转储:线程和共享库