2011-07-25 14 views
1

現在、データベース名をDbContextのコンストラクタに渡しています。私App.ConfigファイルのconnectionStringsセクションでは、私は、接続文字列を追加し、プロバイダ名指定した:さて、私はコンフィギュレーション・ソースの他の種類の接続文字列を取得したいが、ProviderIncompatibleExceptionがある接続文字列でEF CodeFirstのProviderManifestTokenを設定する方法

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

をスローされる。例外には次のメッセージが含まれます。

"The provider did not return a providermanifesttoken string". 

したがって、接続文字列にプロバイダ名を指定するにはどうすればよいですか。現在、私の文字列にはdata sourcedatabaseなどの設定が含まれています。

+0

[ProviderManifestTokenをEFコードのために構成する方法]の可能な複製(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

これは問題ではない可能性がありますが、データベースに接続できない場合、このネットワークに接続できませんでした。

関連する問題