爲了集成測試的目的,我想手動創建並在測試夾具設置中打開一個EntityConnection。當調用Open()方法時,會出現以下異常:手動打開一個EntityConnection到SQLite數據庫導致ProviderIncompatibleException
System.Data.ProviderIncompatibleException:在對類型爲「System.Data.SQLite」的存儲提供程序實例調用「GetService」方法後返回null。 EF6.SQLiteProviderFactory」。商店提供商可能無法正常運作。
我使用的是同樣的連接字符串,當EF關心連接打開時,也使用這個連接字符串。如果我通過EF自動連接處理運行相同的測試套件,它就可以工作。
...
[TestFixtureSetUp]
public void FixtureSetUp()
{
// Setup database
// Setup data access
...
var ec = new EntityConnection([ConnectionString]);
ec.StoreConnection.Open(); --> WORKS!!
ec.Open(); -> Throws
}
...
連接字符串如下所示:
metadata=res://*/Test.TestModel.csdl|res://*/Test.TestModel.ssdl|res://*/Test.TestModel.msl;provider=System.Data.SQLite;provider connection string="data source=C:\Test\tmp4C80.tmp;read only=False;pooling=False;failifmissing=True;synchronous=Full;datetimekind=Utc;enlist=True;setdefaults=False;datetimeformat=ISO8601;journal mode=Off;cache size=4194304"
在app.config爲NUnit的組件,我使用實體以下
<?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>
<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"
type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
</providers>
</entityFramework>
<!-- Register protable database data providers -->
<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.EF6.SQLiteProviderFactory, System.Data.SQLite.EF6, Version=1.0.94.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" />
</DbProviderFactories>
</system.data>
</configuration>
除了NUnit的測試Framework 6.1.1和System.Data.SQLite 1.0.94.0。
編輯:奇怪的是,打開所提供的實體連接手動作品的存儲連接...
您是否嘗試過:provider = System.Data.SQLite.EF6在EF連接字符串中? – ErikEJ 2014-10-01 15:24:28
是的,因爲我沒有在我的app.config中配置名稱爲System.Data.SQLite.EF6的提供程序,所以我得到以下異常: System.ArgumentException:在配置中找不到指定的存儲提供程序,或者無效。 – Harry13 2014-10-02 06:53:26
我認爲這是一個實體框架配置或程序集解決與SQLite無關的問題,也許一些EF專家可以跳入? – Harry13 2014-11-12 08:22:52