【发布时间】:2015-05-21 16:39:27
【问题描述】:
我意识到关于这个主题已经有几个类似的问题,但其中许多来自旧版本的 SQLite,据我所知,它不完全支持 EF 6。我从这些线程中尝试了无数建议,要么做错了,要么必须改变。
我正在使用 VS 2013,目标是 .NET 4.5.1,并安装了来自 system.data.sqlite.org download page 的 sqlite-netFx451-setup-bundle-x86-2013-1.0.96.0.exe 包以及 System.Data来自 NuGet 管理器(安装 EF6)的 .SQLite EF6 包。
下面是我当前的 App.config 文件(除了我尝试将版本、文化和公钥变量添加到类型之外,它几乎没有被改动):
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<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.5.1" />
</startup>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="mssqllocaldb" />
</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, Version=1.0.96.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
</providers>
</entityFramework>
<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, Version=1.0.96.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139"
/>
</DbProviderFactories>
</system.data>
</configuration>
还有我的 packages.config:
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="EntityFramework" version="6.1.2" targetFramework="net451" />
<package id="System.Data.SQLite.EF6" version="1.0.96.0" targetFramework="net451" />
</packages>
如果我执行诸如尝试从模型生成数据库之类的操作,我会看到以下错误:
没有为 ADO.NET 提供程序找到实体框架提供程序 不变名称“System.Data.SQLite.EF6”。确保提供程序已在“entityFramework”部分注册...
我尝试弄乱 App.config 文件并按照旧线程的建议添加其他提供程序和提供程序,但无济于事。
我该如何解决这个问题?非常感谢任何帮助!
编辑:我设法让它工作得很好,可以使用数据库优先的方法。这是我的 App.config 文件的相关部分:
<providers>
<provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
</providers>
<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" />
<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>
我正在使用 EF 6.1.2 和 System.Data.SQLite 1.0.96.0。
【问题讨论】:
-
我必须也添加
System.Data.SQLite
标签: c# entity-framework sqlite entity-framework-6