2014-02-13 75 views
41

有沒有人得到新的System.Data.SQLite 1.0.91.0與Visual Studio 201#中的實體框架6一起工作?如果你有,你是怎麼做到的?System.Data.SQLite 1.0.91.0和EF6.0.2

更新 - 2014年3月20日:System.Data.SQLite 1.0.92.0已經發布,但我沒有運氣在VS2013創建一個EDMX :(我結束了使用包管理器(因爲EF6。#。#是依賴項在新的SQLite的NuGet包):

uninstall-package entityframework -force 

重啓VS2013,換上從現有的數據庫中獲取VS2013生成EDMX老EF5:

install-package entityframework -version 5.0.0 

注:這不是一個複雜的,多表SQLite關係數據庫測試,所以我不知道會出現什麼其他問題如果我的確使用了幾種導航(FK)關係:/

EDMX/Model的答案首先:(更新 - 2014年3月2日)我找到了一個解決方法,但它不夠一致,需要太多的步驟來認爲它是一個有效的解決方案。基本上是:

  • 你讓所有的類(ES)文件(S),

  • 作出了桌子現有的SQLite數據庫的連接,

  • 修改web/app.config中至於仍然出色的SQLite問題單(http://system.data.sqlite.org/index.html/tktview?name=7b8fd3ef77)中的錯誤描述,包括僞造cdsl/.ssdl/.msl碎片和

  • 然後手動創建設計器中的所有實體模型ñ空EDMX重建上一個實體項目,然後...

  • 你點擊右鍵並選擇「從數據庫更新」 ......

有時EF/VS2013將添加.TT前/ DbContesxt,有時它們不。太'打'或'錯':(

回答「代碼優先」有和沒有現有的SQLite數據庫(基於PMCB,Drexter和Jimi的建議)但請注意,您不能生成任何EF模型或EDMX文件[原文 - 概念架構定義語言(.CSDL),存儲架構定義語言(.SSDL)和映射規範語言(.MSL)]自動在Visual Studio 2013中。我沒有嘗試手動創建EDMX文件,看看他們是否會是可口EF即使我做到了,在我看來,這樣做的所有手動創建/映射/修改/ 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> 

這裏測試類(注意t帽子我不得不把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; } 
    } 
} 

,這裏是測試的DbContext:

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)與「添加對實體框架6的支持」。有一個在包括「自述」已添加以下以下內容的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> 

如果您使用的NuGet在VS2013中添加「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> 

作爲一個測試,我做了一個工作NET4.5.1/MVC4/EF5/System.Data副本.SQlite 1.0.90應用程序並運行PM:update-package就可以了。它成功地將上面的行添加到我的web.config中,並添加了所需的「DbProviderFactories」部分。重建並運行...失敗,找不到提供者。我在沒有「DbProviderFactories」的情況下嘗試它...未找到「未找到提供者」。我刪除了新的「提供者」片斷...未找到「未找到提供者」。所以我嘗試一個新的項目,但有和沒有身份(OWIN)的情況下,這是問題。兩者都不行......幾乎沒有想法,所以在Google/StackOverflow搜索後詢問。

============ 2014年2月14日===============

不幸的是,改變後的條目和許多變化並沒有對我的工作PC ... 我在Win8.1 Pro x64上使用VS 2013 Pro。 我重新安裝了System.Data.SQLite。 至少我得到一個新的錯誤同時與現有的SQLite數據庫和VS2013創建新的(我可以訪問並看到它與零代表適當的結構):

"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和系統.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的本地副本替換3x SQLite.Data.xxx.dll引用。我還嘗試了NuGet「System.Data.SQLite.MSIL」包,而不是將DBFactories添加到我試過的各種版本的Web.Config和App.Config。

我也嘗試創建一個NET 4.0 MVC4 Web應用程序,但它似乎NuGet的「System.Data.SQLite(x86/x64)」現在包括對EF6的要求。有希望的是,我跟着它一起嘗試了各種'保存/創建新連接/編輯web.config/etc',但它不起作用。我已經放棄了現在,並回到SQLite與數據集,所以我可以使用Linq與System.Data.DataSetExtensions通過使DataTables「AsEnumerable」(或Java(jdbc)的人想要在他們的Android上的數據庫的脫機副本具有最小App界面的操作系統設備)。

========= 2014年2月19日=======

@Christian薩澳 - 我沒有得到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. 

我有一個新的項目,現在測試它(MVC VS2013中的Web項目使用EF6.0.2和SQLite 1.0.91。3,面向.NET 4.5.1)...

再次運用新的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> 

我將嘗試在下班後的配置(如吉米和PCMB建議)搞亂和發佈任何調查結果。

我只是試着重新安裝System.Data.SQLite的32位和64位版本(有和沒有添加到GAC),但EF6將無法與SQLite一起使用。如果我嘗試手動構建模型和映射,則任何時候我參考/嘗試使用EF6都會失敗。至於創建實體數據模型(無論是從現有的SQLite還是新的SQLite數據庫生成),無論我對配置,連接或提供者做什麼,它都會失敗/出錯。

=========== 2014年2月22日=============

他們拉/回滾的System.Data.SQLite 1.0.91.3更新到1.0.91.0。還有一個未解決的票(http://system.data.sqlite.org/index.html/tktview?name=7b8fd3ef77)打開,其中包括一些mistachkin的建議。這是在app.config mistachkin建議嘗試(此配置不前或...工作對我來說):

<?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> 

我試圖mistachkin的建議,我們添加DLL到GAC後(使用.NET做「 gacutil.exe「)...

+2

你取得任何進展?我被這個問題困住了...... –

+0

嘿,你終於明白了嗎?請告訴你的進展... – Kourosh

+0

'EF6.anything'還沒有運氣。對於CRUD應用程序,我一直在使用EF5,對於查詢,我使用基於JDBC/ODBC SQL的DAL與原始返回或構建Linq和Razor Views可用的對象。 – PWRR2207

回答

22

我在今天工作了好幾個小時才找出來。 NuGet包將適當的條目「System.Data.SQLite.EF6」添加到EntityFramework提供程序工廠中,但您必須刪除或註釋掉舊的「System.Data.SQLite」條目。如果任何提供程序條目無效,則EF上下文構建器會崩潰,並且EF6中不支持舊的1.0.91 SQLite提供程序。

編輯:清理配置允許我的其他上下文對象(SQL Server)實例化,但它仍然不會正確實例化SQLite上下文對象。內部例外是

無法找到請求的.Net Framework數據提供程序。它可能不安裝 。

EDIT 2 /解決方案 終於想通了!我認爲System.Data.SQLite中存在一個問題,它強制引用System.Data.SQLite提供程序名稱,而不是連接字符串中提供的值。我能夠通過在EntityFramework提供程序部分中創建兩個條目來解決此問題,一個名爲「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> 

+0

Aye :(我剛剛嘗試直接從已安裝的版本(EF和SQLite dll的)添加引用,但無濟於事。以後嘗試從新的/乾淨的項目... – PWRR2207

+0

新項目沒有工作,所以希望有人喜歡Brice Lambson閱讀並試圖弄清楚:/ – PWRR2207

+0

檢查我的第二個編輯,我在提供程序部分使用重複條目。 – pmcb

4

它爲我在VS 2010使用一個控制檯應用程序,並首先進行編碼。在任何情況下,這裏是我的app.config,它是基於柯的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> 
+0

是的,這就是我爲任何n新項目需要SQLite(在VS2013中創建2012年MVC4網絡應用程序,而不是升級EF ...):(: – PWRR2207

+0

這個app.config不適用於我。我在這裏發佈了類似的問題:http://stackoverflow.com/questions/21769255/how-do-you-make-entity-framework-6-sqlite-code-first-work。這是使用SQLite 1.0.91和代碼的項目,但不起作用:http://www.sendspace.com/file/ovdxly –

+0

@YiannisMpourkelis我下載了你的代碼,發現這行代碼在你的app.config 應該更改爲 Drexter

6

經過6個小時的庭審/錯誤嘗試,撞頭在牆上和其他的東西,我們的開發者都盤算了解事情的工作方式,我相信我設法讓它在VS 2013上工作。

按照這個步驟。

  1. 安裝System.Data.SQLite如果您還沒有這樣做。
  2. 從NuGet中獲取System.Data.SQLite項目(注意它在app.config中添加了一些內容)。
  3. 這是重要的部分。保存您的解決方案和退出 VS 2013.
  4. 重新加載解決方案,現在您可以將ADO.NET實體數據模型添加到您的項目中。

你想添加的模型每次你將不得不退出VS 2013和必須創建一個使用模型「新建連接」

爲什麼是這樣工作的,你說?我說,宇宙以神祕的方式運作。

編輯:進一步工作就可以了,我發現,爲了打開,你必須在config提供商改變從<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標籤裏面不是已經。

+0

我仍然得到System.Data.Entity.Core.ProviderIncombatibleException像來自PWRR2207的評論,但EF5的解決方法工作,我使用從這裏的示例項目,它已經設置了一個基於v5 EF http: //geekswithblogs.net/danielggarcia/archive/2013/12/22/portable-databases-ii-using-sqlite-with-entity-framework.aspx – Cel

1
<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如何喜歡有代碼2代其他表的區別第一__MigrationHistory & EdmMetadata。我現在稱它爲微不足道的,但如果你真的想要利用CodeFirst這些表必須手動創建,我現在假設。

編輯 - 只有在供應商列表條目和我刪除了所有引用的SqlServer ...

Vs2013終極最新的SQLite的的NuGet。

10

這是我的整個配置文件。我使用SQLite 1.0.91運行EF 6.0.2。我還沒有嘗試過模型生成器,但是我的上下文對象工作正常,並且已經通過上下文測試了插入/更新/刪除以及通過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> 
+0

它添加了System.Data.SQLite和System.Data.SQLite .EF6讓我的項目開始: Luke

+0

謝謝!我複製/粘貼您的entityFramework/providers部分和system.data/DbProviderFactories部分數據通過我的本地副本修復我的解決方案。 –

+0

「技巧是在entityFramework/providers部分,我必須複製EF6提供程序的SQLite提供程序條目,但使用舊的和新的不變名稱。」謝謝!!!!!!! – amurka

1

我在軟件包安裝過程中遇到了許可問題,所以我得到了這個錯誤。 我解決了以管理員身份運行vs2013。

這樣:

  1. 反安裝包
  2. 接近vs2013
  3. 來看,它再次以管理員身份(重要)
  4. 安裝nugetpackage再次

在最後,我還廣告這在供應商(如其他用戶所建議的):

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

不幸的是,我知道這不是管理員權限問題,因爲我在過去的幾個月中一直使用自定義的「以管理員身份運行」VS2013快捷方式,以減少Windows 8的抱怨,因爲我工作在Web API源上,我已經安裝了NuGet SQLite(和EF6)多少次:( – PWRR2207

2

後花在透過互聯網挖掘小時,這裏我提出一個可行的解決方案

<?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> 

project

1

這裏是爲我工作的解決方案。

安裝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> 
1

這對我的作品:

<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框架4.5.1)在http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki

3

最後這個解決方案爲我工作。 DOTNET的Framewok = 4.5.1 實體框架= 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 (i.e. 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> 
4

只想跟我有同樣問題的所有的經驗分享

我試圖用System.Data.SQLite 1.0.94和EF6,並與數據庫連接有一些問題。我在VS 2013.4工作。在安裝完所有必要的軟件包並按照pmbc提示web.config後,我仍然遇到與System.Data.Entity.Core.ProviderIncompatibleException類型的連接和異常相同的問題。

後在互聯網上一些額外的搜索,我發現這個附加的VS2013與SQL精簡和SQLite數據庫這確實hepled我的工作:https://visualstudiogallery.msdn.microsoft.com/0e313dfd-be80-4afb-b5e9-6e74d369f7a1

現在我可以用exsiting的SQLite數據庫/創建VS新/使用現有的數據庫和所有其他的東西創造EF模型

希望這有助於

UPDATE

只是一些更info尋求幫助。這是我生成的.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版本和軟件包版本必須相同。否則,當您啓動應用程序時,您會遇到異常

2

我遇到了同樣的錯誤,但由於其他答案未涉及的原因。所以我想分享我自己的案例。

在包含EDMX的組件中,一切正常。 在客戶端(執行)程序集中,我在運行時總是出現相同的錯誤(在ADO的應用程序配置文件中註冊了實體框架提供程序類型'System.Data.SQLite.EF6.SQLiteProviderServices,System.Data.SQLite.EF6'提供不變名稱爲'System.Data.SQLite.EF6'的.NET提供程序無法加載。)

我注意到,對於EDMX程序集「複製本地」已設置爲true,但未執行程序集。我修好了,沒問題。 因此,如果您也遇到此問題,並且您沒有GAC中的SQLite提供程序,請檢查您的引用,如果您已爲SQLite DLL啓用「複製本地」

我在失去很長時間纔想到檢查提供程序和其他一些事情,所以我希望它會對其他人有所幫助!

+0

)謝謝!我習慣於關閉從AutoCAD編碼中複製本地文件,並將其記錄在其他項目中。 – PWRR2207

3

我只設置複製本地=真正的System.Data.SQLite.EF6庫(在參考文獻 - > System.Data.SQLite.EF6 - >屬性)和它的作品

0

通過從的NuGet安裝最新的SQLite軟件包管理器,我在安裝SQLite包時遇到了錯誤(在處理需要edmx over sqlite數據庫的項目時)。

步驟1:仔細閱讀信息。它可以揭示錯誤信息試圖傳達的內容。

如:

An error occurred while connecting to the database. The database might be unavailable. An exception of type 'System.InvalidCastException' occurred. 

The error message is: '[A]System.Data.SQLite.SQLiteConnection cannot be cast to [B]System.Data.SQLite.SQLiteConnection. 

Type A originates from 'System.Data.SQLite, Version=1.0.105.1, Culture=neutral, PublicKeyToken=db937bc2d44ff139' in the context 'Default' 
at location 'C:\WINDOWS\Microsoft.Net\assembly\GAC_32\System.Data.SQLite\v4.0_1.0.105.1__db937bc2d44ff139\System.Data.SQLite.dll'. 

Type B originates from 'System.Data.SQLite, Version=1.0.106.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139' in the context 'LoadNeither' 
at location 'C:\Users\Ganesh Kamath\AppData\Local\Microsoft\VisualStudio\14.0\ProjectAssemblies\og1mcjvn01\System.Data.SQLite.dll'.'. 

在閱讀完之後,我意識到,我選擇了版本1.0.106.0升級。

本質上說消息說它知道版本1.0.105.1,但不知道版本1.0.106.0

步驟2:通過在Visual Studio中手動選擇Nuget Package for Solution選項來刪除導致問題的版本。

工具> NuGet包管理器>管理的NuGet的解決方案包...

enter image description here

第3步:使用的NuGet命令行來安裝系統明白的SQLite的版本。

在上面的例子中,版本是1.0.105。1個

工具> NuGet包管理器>包管理器控制檯

enter image description here

的命令需要這將如下所示:

Install-Package System.Data.SQLite -Version 1.0.105.1 
Install-Package System.Data.SQLite.Core -Version 1.0.105.1 
Install-Package System.Data.SQLite.EF6 -Version 1.0.105.1