我正在使用带有实体框架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来部署应用程序,但是现在我在本地的dev计算机上遇到了一个问题(我在这里安装了MySQL连接器),当EF试图连接时,我得到了这个错误:
列'InvariantName‘被限制为唯一。值'MySql.Data.MySqlClient‘已经存在。
如果我注释掉上面添加到app.config中的XML,错误就会消失。这很可能是因为系统上安装了相同的驱动程序,并且在machine.config中。
解决办法是什么?我宁愿不必手动注释和取消注释行,这取决于我构建应用程序的系统。
发布于 2011-09-08 20:35:35
尝试在webconfig中添加< remove 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>发布于 2014-03-25 02:23:37
您还可以考虑将所有mysql从C:\Program Files (x86)\MySQL\MySQL Connector Net 6.8.3\Assemblies\v4.0复制到项目的bin文件夹中。通过这种方式,EF6可以到达所有必需的MySQL连接器(MySql.Data)子类。
https://stackoverflow.com/questions/7354116
复制相似问题