Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .NET MySQL连接器与DbProviderFactorys冲突_C#_.net_Mysql_Mysql Connector - Fatal编程技术网

C# .NET MySQL连接器与DbProviderFactorys冲突

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>

我正在使用Entity Framework 4的.NET MySQL连接器,一切都很好,但我想在服务器上部署应用程序时将MySQL客户端DLL文件打包,这样我们就不必担心在每台服务器上安装MySQL,每个应用程序只需有它需要的正确副本

为了实现这一点,我确保MySQL引用设置了“Copy Local”,以便将它们复制到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尝试连接时,我遇到了以下错误:

列“不变量名称”被约束为唯一。价值 “MySql.Data.MySqlClient”已存在。

如果我在app.config中注释掉上面添加的XML,错误就会消失。这可能是因为系统上安装了相同的驱动程序,并且在machine.config中


解决办法是什么?我宁愿不必根据构建应用程序的系统手动注释和取消注释该行。

尝试在您的网络配置中添加。在您的计算机上,您已经安装了用于MySql的连接器,并且您的machine.config已通过在DbProviderFactorys中添加一项进行了修改。因此,如果您在web.config中放置另一个MySql数据提供程序,就好像您试图注册相同的内容两次一样

<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)子类。

在服务器和本地机器上都能完美地工作。谢谢我也有这个问题,这很有效。我想应该是这样的,但没有想到尝试使用不变关键字。