在已注册的 .NET 数据提供程序列表中找不到指定的不变名称“MySql.Data.MySqlClient”

问题描述

我有一个使用 .Net Standard 2.1 开发的 C# 库,并且在基于 .Net Core 3.0 构建的测试控制台应用程序中调用了该库。但是在运行时,GetFactory 会抛出异常。

 private DbConnection connection;
 connection = DbProviderFactories.GetFactory("MySql.Data.MySqlClient").CreateConnection();

异常:

DbProviderFactories.GetFactory 在已注册的 .NET 数据提供程序列表中找不到指定的不变名称“MySql.Data.MySqlClient”。

我已经安装了 MySqlConnector 1.2.1。但它没有帮助。并在 app.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=8.0.23.0,Culture=neutral,PublicKeyToken=c5687fc88969c44d" />
</DbProviderFactories>
</system.data>

预先感谢您的帮助。

解决方法

您为 app.config 显示的 XML 仅适用于 .NET Framework 应用程序。

对于 .NET Core 2.1 或更高版本,调用 DbProviderFactories.RegisterFactory。您传递的确切参数将取决于您要注册的工厂(以及您已安装的 NuGet 包):

// MySqlConnector (my personal recommendation for .NET Core)
DbProviderFactories.RegisterFactory("MySqlConnector",MySqlConnector.MySqlConnectorFactory.Instance);

// MySql.Data (may be needed instead if other code is hard-coded to "MySql.Data.MySqlClient")
DbProviderFactories.RegisterFactory("MySql.Data.MySqlClient",MySql.Data.MySqlClient.MySqlClientFactory.Instance);

有关详细信息,请参阅 Using DbProviderFactories

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...