System.Data.SQLite 1.0.91.0和EF6.0.2

有没有人得到新的System.Data.SQLite 1.0.91.0与Visual Studio 201中的entity framework6#? 如果你有,你是怎么做到的?

更新 – 2014年3月20日:System.Data.SQLite 1.0.92.0已经发布,但我没有运气在VS2013创build一个EDMX :(我结束了使用包pipe理器(因为EF6。#。#是新SQLite中的依赖项NuGet包):

uninstall-package entityframework -force 

重新启动VS2013,然后把旧的EF5放到VS2013从现有的数据库生成一个EDMX:

 install-package entityframework -version 5.0.0 

注意:这不是一个复杂的多表SQLite关系数据库testing,所以我不确定如果我使用任何不止一对导航(FK)关系的东西会出现其他问题:/

EDMX / Model的答案首先:(更新 – 2014年3月2日)我发现了一个解决方法,但它不够一致,需要太多的步骤来认为它是一个有效的解决scheme。 基本上:

  • 你使所有的类文件,

  • 用表连接到现有的SQLite数据库,

  • 请修改web / app.config,使其符合仍然出色的SQLite问题故障单( http://system.data.sqlite.org/index.html/tktview?name=7b8fd3ef77 )中的错误信息,包括伪造cdsl / .ssdl /.msl文件,和

  • 然后在重build项目之前在devise器中手动创build空的EDMX中的所有实体模型,然后…

  • 您右键单击实体并select“从数据库更新”…

有时EF / VS2013将添加.tt / DbContesxt,有时它们不会。 太“打或错”:(

回答“代码优先”有和没有现有的SQLite数据库(基于PMCB,Drexter和Jimi的build议)。 但请注意,您无法在Visual Studio 2013中自动生成任何EF模型或EDMX文件[概念模式定义语言(.CSDL),存储模式定义语言(.SSDL)和映射规范语言(.MSL)]。不要尝试手动创buildEDMX文件,看看它们是否适合EF,即使我做了,在我看来,做所有手动创build/映射/更改/ XML编辑,都会使基于实体的框架的整个目的/概念失败…

 <connectionStrings> <add name="DogsContext" connectionString="Data Source=|DataDirectory|\dogs.s3db;" providerName="System.Data.SQLite" /> </connectionStrings> <entityFramework> <providers> <provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6, Version=1.0.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" /> </providers> </entityFramework> <system.data> <DbProviderFactories> <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, Version=1.0.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" /> <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.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" /> </DbProviderFactories> </system.data> 

这里是testing类(注意,我不得不改变DogID到Int64使它与SQLite工作…):

 using System.Data.Entity; namespace WebApplication1.Models { public class Dog { public Dog() { } public Int64 DogID { get; set; } public string DogName { get; set; } } } 

这里是testingDbContext:

 using System.Data.Entity; namespace WebApplication1.Models { public class DogsContext : DbContext { public DogsContext() : base() { } public DbSet<Dog> DogNames { get; set; } } } 

=============问题的原始细节==================

SQLite 1.0.91.0昨天发布( http://system.data.sqlite.org/index.html/doc/trunk/www/news.wiki )与“添加支持entity framework6”。 在附带的“自述文件”中有一个警告,您可以将以下内容添加到web.config / app.config中:

 <configuration> <system.data> <DbProviderFactories> <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, Version=1.0.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" /> </DbProviderFactories> </system.data> </configuration> 

如果您在VS2013中使用NuGet来添加“System.Data.SQLite(x86 / x64)”,您现在将此行添加到web.config / app.config:

 <entityFramework> ... <providers> <provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" /> </providers> ... </entityFramework> 

作为一个testing,我做了一个工作的NET4.5.1 / MVC4 / EF5 / System.Data.SQlite 1.0.90应用程序的副本,并在其上运行PM:update-package。 它成功地将上面的行添加到我的web.config中,并添加了所需的“DbProviderFactories”部分。 重build并运行…失败,找不到提供者。 我尝试没有“DbProviderFactories”…没有find提供者失败。 我删除了新的“供应商”片断…与“没有发现供应商”失败。 所以我尝试一个新的项目,但有和没有身份(OWIN)的情况下,这是问题。 两者都不工作…几乎用完了想法,所以在Google / StackOverflowsearch之后问这里。

============ 14 Feb 2014 ===============

不幸的是,改变的条目和众多的变化无法在我的电脑上工作…我在Win8.1 Pro x64上使用VS 2013 Pro。 我重新安装System.Data.SQLite。 至less我得到了现有的SQLite数据库和VS2013创build的新的错误(我可以访问,看到它有一个正确的结构与零表):

 "An error occurred connecting to the database. The database might be unavailable. An exception of type 'System.Data.Entity.Core.ProviderIncompatibleException' occurred. The error message is: Schema specified is not valid. Errors: StoreSchemaDefinition(2,64) : Error 0175: The ADO.NET provider with invariant name 'System.Data.SQLite.EF6' is either not registered in the machine or application config file, or could not be loaded. See the inner exception for details.'" 

EF6和System.Data.SQLite(x86 / x64)通过NuGet引入全新的MVC Web应用程序和Windows控制台应用程序。 两者都产生了上述错误…我开始怀疑,也许我的VS3013有什么问题,但我不想再花6小时下载并修补它,当我可以使用MVC4 / SQLite / EF5 …

===== 2014年2月17日========

@Jimi – 这里没有运气。 我尝试了与NET 4.5和4.5.1与一个新的MVC和Windows应用程序项目。 我尝试了EF6.0.0和EF6.0.2。 我尝试从NuGet中添加“System.Data.SQLite(x86 / x64)”后,从安装System.Data.SQLite的本地副本中replace3x SQLite.Data.xxx.dll引用。 我也尝试了NuGet“System.Data.SQLite.MSIL”包,而不是将DBFactories添加到我试过的各种版本的Web.Config和App.Config。

我也尝试创build一个NET 4.0 MVC4 Web应用程序,但它似乎NuGet的“System.Data.SQLite(x86 / x64)”现在包括一个EF6的要求。 有希望的是,我去了,并尝试了各种“保存/创build新的连接/编辑web.config / etc”,但它不会工作。 我已经放弃了现在,并回到SQLite与数据集,所以我可以使用Linq与System.Data.DataSetExtensions通过使DataTables“AsEnumerable”(或Java(jdbc)的人想要在他们的Android上的数据库的脱机副本操作系统设备与最小的应用程序界面)。

========= 19二月2014 =======

@Christian Sauer – 我没有得到EF6和System.Data.SQLite(或System.Data.SQLite.EF6)一起工作,但…但

我刚刚在http://system.data.sqlite.org/index.html/tktview?name=7b8fd3ef77上发现了一个更新,说有一个更新的SQLite NuGet包:

 mistachkin added on 2014-02-19 03:39:35: All NuGet packages have been updated to 1.0.91.3. Several fixes are included that pertain to supporting Entity Framework 6. 

我现在用一个新的项目(VS2013中的MVC Web项目,使用EF6.0.2和SQLite 1.0.91.3,目标.NET 4.5.1)进行testing。

新的SQLite 1.0.91.3没有运气。 web.config已更改为:

  <entityFramework> <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> <parameters> <parameter value="v11.0" /> </parameters> </defaultConnectionFactory> <providers> <provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" /> <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> </providers> </entityFramework> <system.data> <DbProviderFactories> <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" /> <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> 

我将尝试下class后(如吉米和PCMBbuild议)搞乱configuration,并张贴任何调查结果。

我只是尝试重新安装System.Data.SQLite的32位和64位版本(有和没有添加到GAC),但EF6将不能与SQLite一起使用。 如果我尝试手动构build模型和映射,则任何时候我都会参考/尝试使用EF6。 至于创build实体数据模型(无论是从现有的SQLite或新的SQLite数据库产生),无论我做什么configuration,连接或提供程序,它都会失败/错误。

=========== 22二月2014 =============

他们将System.Data.SQLite 1.0.91.3更新拉回/回滚到1.0.91.0。 还有一个未解决的问题( http://system.data.sqlite.org/index.html/tktview?name=7b8fd3ef77 )打开,其中包含了一些mistachkin的build议。 这里是app.config错误推荐尝试(这个configuration没有为我工作之前或…):

 <?xml version="1.0"?> <configuration> <configSections> <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> </configSections> <system.data> <DbProviderFactories> <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, Version=1.0.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" /> <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.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" /> </DbProviderFactories> </system.data> <connectionStrings> <add name="northwindEFEntities" connectionString="metadata=res://*/NorthwindModel.EF6.2013.csdl|res://*/NorthwindModel.EF6.2013.ssdl|res://*/NorthwindModel.EF6.2013.msl;provider=System.Data.SQLite.EF6;provider connection string=&quot;data source=.\northwindEF.db&quot;" providerName="System.Data.EntityClient" /> </connectionStrings> <entityFramework> <providers> <provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6, Version=1.0.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" /> </providers> </entityFramework> </configuration> 

在我尝试将dll添加到GAC(使用.NET“gacutil.exe”完成)的build议之后,

我在今天工作了几个小时,然后才搞清楚了。 NuGet包将相应的条目“System.Data.SQLite.EF6”添加到EntityFramework提供程序工厂中,但是必须删除或注释掉旧的“System.Data.SQLite”条目。 如果任何提供程序条目无效,则EF上下文构build器将启动,而EF6中不支持旧的1.0.91 SQLite提供程序。

编辑:清理configuration允许我的其他上下文对象(SQL Server)实例化,但它仍然不会正确实例化SQLite上下文对象。 内在的例外是

无法find所需的.Net框架数据提供程序。 它可能没有安装。

编辑2 /解决scheme终于搞明白了! 我认为在System.Data.SQLite中有一个问题,它强制引用System.Data.SQLite提供程序名称,而不是连接string中提供的值。 我可以通过在EntityFramework提供程序部分创build两个条目来解决这个问题,一个名为“System.Data.SQlite”,一个名为“System.Data.SQLite.EF6”,但两个提供程序实际上都使用EF6提供程序。

 <entityFramework> ... <providers> <provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6, Version=1.0.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" /> <provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6, Version=1.0.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" /> </providers> 

这是我的整个configuration文件。 我使用SQLite 1.0.91运行EF 6.0.2。 我还没有尝试模型生成器,但我的上下文对象工作正常,我已经通过上下文testing插入/更新/删除以及通过dbcontext直接SQL命令。 技巧是在entityFramework / providers部分。 我不得不复制EF6提供程序的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" /> <section name="electra.common.configuration.electraConfiguration" type="Electra.Common.Configuration.ElectraConfiguration, Electra.Common, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" allowDefinition="Everywhere" allowExeDefinition="MachineToApplication" restartOnExternalChanges="true" /> <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> </configSections> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.1" /> </startup> <connectionStrings> <add name="DBContext_Server" connectionString="server=sunset\sql2012;Integrated Security=SSPI;database=Electra;Pooling=true;max pool size=1000;min pool size=5;Connection Lifetime=30;connection timeout=15" providerName="System.Data.SqlClient" /> <add name="DBContext_ElectraPOS" connectionString="Data Source=D:\Electra\ElectraWeb\PosEngine.Repository\ElectraPOS.db" providerName="System.Data.SQLite.EF6" /> </connectionStrings> <system.data> <DbProviderFactories> <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, Version=1.0.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" /> <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.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" /> </DbProviderFactories> </system.data> <entityFramework> <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" /> <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.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" /> <provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6, Version=1.0.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" /> </providers> </entityFramework> <electra.common.configuration.electraConfiguration> <logging> <levels info="true" warning="true" error="true" debug="true" /> </logging> </electra.common.configuration.electraConfiguration> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="Microsoft.Owin" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-2.1.0.0" newVersion="2.1.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.Net.Http.Formatting" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="Microsoft.Owin.Security" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-2.0.2.0" newVersion="2.0.2.0" /> </dependentAssembly> </assemblyBinding> </runtime> </configuration> 

经过6个小时的尝试/错误尝试,我们在开发者的墙上和其他东西上做了些什么事情,我相信我已经成功地在VS 2013上工作了。

按照这个步骤。

  1. 如果您还没有安装System.Data.SQLite ,请安装它。
  2. 在你的项目中从NuGet中获取System.Data.SQLite(注意它在app.config中添加了一些东西)。
  3. 这是重要的一部分。 保存您的解决scheme并退出 VS 2013。
  4. 重新加载解决scheme,现在可以将ADO.NET实体数据模型添加到您的项目中。

每次你想添加一个模型,你将不得不退出VS 2013,并且必须使用“New Connection …”创build模型。

为什么这样工作,你说呢? 我说,宇宙以神秘的方式工作。

编辑:进一步工作,我发现,为了打开连接到模型,你必须改变configuration中的提供者从<provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" /><provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />DbProviderFactories必须在system.data标记中,而不是已经在。

它使用控制台应用程序在VS 2010上工作,并首先执行代码。 无论如何,这里是我的app.config,它是基于Brice的EF6 SQLite教程( http://www.bricelam.net/2012/10/entity-framework-on-sqlite.html ):

 <?xml version="1.0"?> <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> <entityFramework> <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> <parameters> <parameter value="v11.0"/> </parameters> </defaultConnectionFactory> <providers> <provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6, Version=1.0.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" /> </providers> </entityFramework> <system.data> <DbProviderFactories> <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, Version=1.0.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" /> </DbProviderFactories> </system.data> <connectionStrings> <add name="ChinookContext" connectionString="Data Source=|DataDirectory|Chinook_Sqlite_AutoIncrementPKs.sqlite" providerName="System.Data.SQLite"/> </connectionStrings> </configuration> 

只是想与我所有的经验分享同样的问题

我试图使用System.Data.SQLite 1.0.94和EF6,并与连接数据库有一些问题。 我在VS 2013.4工作。 安装所有必要的软件包,并检查web.config作为pmbcbuild议我仍然有类似System.Data.Entity.Core.ProviderIncompatibleException连接和exception相同的问题。

在互联网上的一些额外的search后,我发现这个附加的VS2013使用SQL Compact和SQLite数据库,真正使我he:: https ://visualstudiogallery.msdn.microsoft.com/0e313dfd-be80-4afb-b5e9-6e74d369f7a1

现在我可以使用现有的数据库和所有其他的东西,现有的SQLite db /从VS /创buildEF模型创build一个新的

希望这可以帮助

UPDATE

只是一些更多的信息的帮助。 这是我的结果.config文件部分

 <entityFramework> <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" /> <providers> <provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6, Version=1.0.95.0, Culture=neutral" /> <provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6, Version=1.0.95.0, Culture=neutral" /> </providers> </entityFramework> <system.data> <DbProviderFactories> <remove invariant="System.Data.SQLite" /> <remove invariant="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" /> <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> 

另外,请检查您在本地安装的System.Data.SQLite.dll库的版本号(通过defaulr,它安装在GAC中)您当前项目中的GAC版本和软件包版本必须相同。 否则,当你启动你的应用程序时,你会发现一个exception

最后这个解决scheme为我工作。 DotNet Framewok = 4.5.1entity framework= 6.1.1

下载这个: sqlite-netFx451-setup-bundle-x86-2013-1.0.94.0.exe

 <?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" /> <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> </configSections> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.1" /> </startup> <entityFramework> <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" /> <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> <!-- NOTE: The extra "remove" element below is to prevent the design-time support components within EF6 from selecting the legacy ADO.NET provider for SQLite (ie the one without any EF6 support). It appears to only consider the first ADO.NET provider in the list within the resulting "app.config" or "web.config" file. --> <DbProviderFactories> <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, Version=1.0.94.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" /> <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> <connectionStrings> <add name="VelocityDBEntities" connectionString="metadata=res://*/AppData.Model1.csdl|res://*/AppData.Model1.ssdl|res://*/AppData.Model1.msl;provider=System.Data.SQLite.EF6;provider connection string=&quot;data source=F:\VelocityPOS\VelocityDB.sqlite&quot;" providerName="System.Data.EntityClient" /> </connectionStrings> </configuration> 

我只是设置复制本地= True为System.Data.SQLite.EF6库(在参考 – > System.Data.SQLite.EF6 – >属性),它的工作原理

花了数小时的时间,通过互联网挖掘,这里我提出了一个工作的解决scheme

 <?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> <entityFramework> <providers> <provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" /> </providers> </entityFramework> <connectionStrings> <add name="NorthwindContext" connectionString="Data Source=Northwind.sl3" providerName="System.Data.SQLite.EF6" /> </connectionStrings> <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" /> </DbProviderFactories> </system.data> </configuration> 

项目

我经历了同样的错误,但是由于其他原因似乎没有被其他答案所覆盖 。 所以我想分享我自己的情况。

在包含EDMX的程序集中,一切正常。 在客户端(执行)程序集中,我总是在运行时出现相同的错误(在ADO的应用程序configuration文件中注册了entity framework提供程序types“System.Data.SQLite.EF6.SQLiteProviderServices,System.Data.SQLite.EF6”。具有不变名称“System.Data.SQLite.EF6”的.NET提供程序无法加载。

我注意到,对于EDMX程序集“复制本地”被设置为true,但不执行程序集。 我修好了,没问题。 因此,如果您也遇到过这个问题,并且您没有GAC中的SQLite提供程序,请检查您的引用是否为SQLite DLL启用了“copy local”

我花了很长时间才想到检查提供者和其他一些事情,所以我希望这会对其他人有所帮助!

 <providers> <provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6, Version=1.0.91.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" /> </providers> 

这工作对我来说有一些内部的错误,而它运行时可能会做EF之间的区别如何喜欢有代码第一__MigrationHistory和EdmMetadata 2其他表。 我现在称之为微不足道的,但如果你真的想利用CodeFirst这些表必须手动创build,我现在假设。

编辑 – 只有提供者列表中的条目,我删除了所有对SqlServer的引用…

Vs2013旗舰版最新SQLite Nuget。

我在软件包安装过程中遇到了一个权限问题,所以我得到了这个错误。 我解决了以pipe理员身份运行vs2013。

所以:

  1. 取消打包
  2. 接近vs2013
  3. 以pipe理员身份再次运行(重要)
  4. 再次安装nugetpackage

最后,我还在提供商(正如其他用户所build议的那样)

  <provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" /> 

这是为我工作的解决scheme。

安装System.Data.SQLite包,并确保db工厂部分如下所示。

 <DbProviderFactories> <remove invariant="System.Data.SQLite" /> <remove invariant="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" /> <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> 

这对我行得通 :

 <entityFramework> <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" /> <add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".NET Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, 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" /> <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> 

使用最新的nuget包(1.0.94.1): https ://www.nuget.org/packages/System.Data.SQLite/和SQLite工具:32位Windows(.NET Framework 4.5.1) //system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki