C# .NET MySQL连接器与DbProviderFactorys冲突
我正在使用Entity Framework 4的.NET MySQL连接器,一切都很好,但我想在服务器上部署应用程序时将MySQL客户端DLL文件打包,这样我们就不必担心在每台服务器上安装MySQL,每个应用程序只需有它需要的正确副本 为了实现这一点,我确保MySQL引用设置了“Copy Local”,以便将它们复制到bin文件夹中,并将以下内容添加到我的app.config中:C# .NET MySQL连接器与DbProviderFactorys冲突,c#,.net,mysql,mysql-connector,C#,.net,Mysql,Mysql Connector,我正在使用Entity Framework 4的.NET MySQL连接器,一切都很好,但我想在服务器上部署应用程序时将MySQL客户端DLL文件打包,这样我们就不必担心在每台服务器上安装MySQL,每个应用程序只需有它需要的正确副本 为了实现这一点,我确保MySQL引用设置了“Copy Local”,以便将它们复制到bin文件夹中,并将以下内容添加到我的app.config中: <system.data> <DbProviderFactories>
<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尝试连接时,我遇到了以下错误:
列“不变量名称”被约束为唯一。价值
“MySql.Data.MySqlClient”已存在。
如果我在app.config中注释掉上面添加的XML,错误就会消失。这可能是因为系统上安装了相同的驱动程序,并且在machine.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>
< /代码> 您也可以考虑将所有MySQL DLL从<代码> C:\Project文件(x86)\MySQL \MySQL连接器NET.63.3\Studio\V4.0<代码>复制到项目的bin文件夹中。通过这种方式,EF6可以访问所有必需的MySQL连接器(MySQL.Data)子类。在服务器和本地机器上都能完美地工作。谢谢我也有这个问题,这很有效。我想应该是这样的,但没有想到尝试使用不变关键字。