2011-09-08 53 views
22

我使用的.NET MySQL連接與實體框架4,一切偉大的工作,但我想在服務器上部署的時候,所以我們不必打包與我的應用程序的MySQL客戶端的DLL文件擔心在每臺服務器上安裝mysql,每個應用程序都會擁有它所需的正確副本。.NET MySQL連接衝突DbProviderFactories

要做到這一點,我確信MySQL的參考文獻有「複製本地」設置,這樣他們就可以複製到bin文件夾中,並添加以下到我的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部署的應用程序,但現在我有我的本地開發機器上的問題(如果我做已經安裝了MySQL連接器),當EF嘗試我得到這個錯誤連接:

'InvariantName'列被限制爲唯一。值 「MySql.Data.MySqlClient」已經存在。

如果我註釋掉上面在app.config中添加的XML,錯誤就會消失。這很可能是因爲相同的驅動程序安裝在系統上並位於machine.config中。

解決方案是什麼?我寧願不必手動評論和取消註釋,這取決於我構建應用程序的系統。

回答

43

嘗試添加<在您的webconfig中刪除invariant =「MySql.Data.MySqlClient」/>。在您的計算機上,你已經安裝了MySQL和你的machine.config中的連接器通過在DbProviderFactories增加一個項目已被修改。所以,如果你把另一個MySql數據提供者放到你的web.config中,就好像你想要兩次註冊同樣的東西。

<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

你也可以考慮到所有的MySQL的DLL從C:\Program Files (x86)\MySQL\MySQL Connector Net 6.8.3\Assemblies\v4.0複製到項目的bin文件夾。通過這種方式,EF6可以達到所有必需的MySQL連接器(MySql.Data)子類。