首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.NET MySQL连接器冲突DbProviderFactories

.NET MySQL连接器冲突DbProviderFactories
EN

Stack Overflow用户
提问于 2011-09-08 20:31:53
回答 2查看 18.4K关注 0票数 22

我正在使用带有实体框架4的.NET MySQL连接器,一切都很好,但是当部署到服务器上时,我希望将MySQL客户端DLL文件与我的应用程序一起打包,这样我们就不必担心在每台服务器上安装mysql,每个应用程序都有它所需要的正确副本。

为了实现这一点,我确保MySQL引用具有“复制本地”设置,以便将它们复制到bin文件夹,并将以下内容添加到我的app.config中:

代码语言:javascript
复制
<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中。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-08 20:35:35

尝试在webconfig中添加< remove invariant="MySql.Data.MySqlClient“/ >。在您的计算机上,您已经安装了用于MySql的连接器,并且您的machine.config已经通过在DbProviderFactories中添加项进行了修改。因此,如果将另一个MySql数据提供程序放在web.config中,这就像尝试注册两次相同的东西一样。

代码语言:javascript
复制
<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>
票数 47
EN

Stack Overflow用户

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7354116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档