.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的主要内容,如果未能解决你的问题,请参考以下文章