2011-09-08 18 views
22

私はEntity Framework 4で.NET MySQL Connectorを使用していますが、すべてうまくいっていますが、私たちのアプリケーションにMySQLクライアントDLLファイルをパッケージ化したいので、各サーバにmysqlをインストールすることを心配するには、各アプリケーションに必要な正しいコピーがあるだけです。.NET MySQL Connectorと競合するDbProviderFactories

これを可能にするために、私はMySQLの参照は、「ローカルコピーは、」そう、彼らはビンのフォルダにコピーされるだろうし、私はapp.configに以下を追加したことを確認しました:

<system.data> 
    <DbProviderFactories> 
     <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.3.7.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" /> 
    </DbProviderFactories> 
</system.data> 

これは動作し、私はリモートサーバにmysqlをインストールせずにアプリケーションをデプロイすることができましたが、ローカルのdevマシンに問題があります(にMySQLコネクタがインストールされています)、EFが接続:

列 'InvariantName'は一意に制限されています。値 'MySql.Data.MySqlClient'が既に存在します。

上記のapp.configで追加したXMLをコメントアウトすると、エラーは消えてしまいます。これは、同じドライバがシステムにインストールされており、machine.configに入っている可能性があります。

解決策は何ですか。むしろ、アプリケーションをビルドするシステムに応じて、手動でコメントやコメントを解除する必要はありません。

答えて

43

< try invariant = "MySql.Data.MySqlClient" />をwebconfigに追加してください。お使いのコンピュータでConnector for MySqlをインストールし、DbProviderFactoriesに項目を追加してmachine.configを変更しました。したがって、別のMySqlデータプロバイダをweb.configに配置した場合、同じものを2回登録しようとしている場合と同じです。

<system.data> 
    <DbProviderFactories> 
     <remove invariant="MySql.Data.MySqlClient" /> 
     <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.3.7.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" /> 
    </DbProviderFactories> 
</system.data> 
+1

サーバーとローカルマシンの両方で完全に動作します。ありがとう! – Kekoa

+1

私もこの問題を抱えていましたが、これは魅力的でした。私はそれがこのようなものになると思ったが、不変のキーワードを試してみることは考えなかった。 –

+1

これも私のために働いた!ありがとう、トン:) – DigitalRayne

0

また、あなたのプロジェクトのbinフォルダにC:\Program Files (x86)\MySQL\MySQL Connector Net 6.8.3\Assemblies\v4.0からすべてのMySQLのDLLをコピーすることを検討することができます。そうすれば、EF6は必要なすべてのMySQLコネクタ(MySql.Data)サブクラスに到達できます。