2011-07-25 91 views
1

當前,我將數據庫名稱傳遞給構造函數DbContext。在我App.Config文件的connectionStrings部分,我添加了一個連接字符串和指定的供應商名稱:如何在連接字符串中爲EF CodeFirst配置ProviderManifestToken

<connectionStrings> 
    <add name="myConnectionString" connectionString="[..]" providerName="System.Data.SqlClient"/> 
</connectionStrings> 

現在,我想從其他類型的配置源的連接字符串,但ProviderIncompatibleException是拋出。異常包含以下消息:

"The provider did not return a providermanifesttoken string". 

所以,我怎麼可以指定一個連接字符串中提供程序的名稱?目前我的字符串包含data sourcedatabase和一些其他配置設置。

+0

可能重複[如何爲EF代碼優先配置ProviderManifestToken](http://stackoverflow.com/questions/4741499/how-to-configure-providermanifesttoken-for-ef-code-first) –

回答

3

提供程序由連接的類型定義,並且連接由連接工廠創建,連接工廠設置爲靜態屬性Database.DefaultConnectionFactory。這個屬性的默認值是SqlConnectionFactory,所以除非你連接到不同的數據庫服務器(例如SQL Server CE),否則它應該簡單地工作。如果它不確定您的連接字符串是否正確。如果EF無法連接到SQL服務器(我想我看到這個例外,無效憑證,無效的數據庫名稱或無效的SQL服務器實例名稱),這個例外有時會被解僱。

編輯:

出於完整性:如果你通過連接字符串上下文的連接工廠纔會被使用。您也可以傳遞整個連接實例,並且不會使用連接工廠。提供商清單令牌將根據您將傳遞給上下文的連接類型進行推斷。

+0

好點。我想知道是否可以用SqlConnectionFactory提供連接字符串和提供程序類型(對於sql ce 4)。 –

+0

我不這麼認爲,因爲'SqlConnectionFactory'與'SqlConnection'緊密結合,導致SQL Server CE的提供者清單令牌不正確。 'System.Data.Entity.Infrastructure.SqlCeConnectionFactory'應該能夠爲SQL Server CE 3.5和4.0創建正確的連接類型。 –

+1

是的,只是試過它和'Database.DefaultConnectionFactory =新的SqlCeConnectionFactory(「System.Data.SqlServerCe.4.0」,「」,「數據源= | DataDirectory | Database.sdf」);'與CE4一起工作。另一個好點。 –

0

這可能不是你的問題,但是如果你根本無法連接到你的數據庫也會發生這個錯誤 - 我們的網絡阻塞了端口1433.打開它,錯誤消失。

相關問題