.NET MySQL 连接器冲突的 DbProviderFactories

Posted

技术标签:

【中文标题】.NET MySQL 连接器冲突的 DbProviderFactories【英文标题】:.NET MySQL Connector Conflicting DbProviderFactories 【发布时间】:2011-11-13 07:46:39 【问题描述】:

我将 .NET mysql 连接器与 Entity Framework 4 一起使用,一切正常,但我想在部署到服务器时将 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 中。

解决办法是什么?我宁愿不必手动注释和取消注释,具体取决于我为哪个系统构建应用程序。

【问题讨论】:

【参考方案1】:

尝试在您的 webconfig 中添加 。在您的计算机上,您已经安装了 MySql 连接器,并且您的 machine.config 已通过在 DbProviderFactories 中添加一个项目进行了修改。因此,如果您在 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>

【讨论】:

在服务器和本地机器上都能完美运行。谢谢! 我也遇到了这个问题,这就像一个魅力。我认为它会是这样的,但没想到尝试使用 invariant 关键字。【参考方案2】:

您还可以考虑将所有 mysql DLL 从 C:\Program Files (x86)\MySQL\MySQL Connector Net 6.8.3\Assemblies\v4.0 复制到项目的 bin 文件夹中。通过这种方式,EF6 可以访问所有需要的 MySQL 连接器(MySql.Data)子类。

【讨论】:

以上是关于.NET MySQL 连接器冲突的 DbProviderFactories的主要内容,如果未能解决你的问题,请参考以下文章

XAMPP与本地Mysql冲突解决方法

ADO.net实体数据库模型向导创建过程中,测试连接成功后,点击下一步,界面一闪而过,无法创建.edmx文件

在带有事务“并发冲突”的 Ado.Net 更新中

mysql反引号的使用(防冲突)

ASP.NET MVC 5 插入语句冲突 FK

MySQL .NET 连接器包