.NET MySQL连接器冲突的DbProviderFactories
我在实体框架4中使用.NET MySQL连接器,并且一切运行良好,但是我想在部署到服务器上时将我的应用程序打包为MySQL客户端DLL文件,因此我们不必担心在每台服务器上安装MySQL,每个应用程序将只需要它所需的正确副本。
为了做到这一点,我确保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中。
解决办法是什么? 我宁愿不必手动评论和取消注释,这取决于我构建应用程序的系统。
尝试在您的webconfig中添加<remove invariant =“MySql.Data.MySqlClient”/> 。 在您的计算机上,您已经安装了适用于MySql的连接器,并且您的machine.config已通过添加DbProviderFactory中的项目进行了修改。 所以,如果你把另一个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>
您也可以考虑将C:Program Files (x86)MySQLMySQL Connector Net 6.8.3Assembliesv4.0
所有mysql DLL复制到项目的bin文件夹中。 通过这种方式,EF6可以达到所有必需的MySQL连接器(MySql.Data)子类。