asp.netcore3.0 使用 DbProviderFactories 连接数据库

在.netstandard2.0时 System.Data.Common 这个包里并没有加入DbProviderFactories

DbProviderFactories类在.netframework中是非常重要的存在,依靠他可以适配各种数据库客户端(sqlserver、mysql、sqllite等)创建数据库连接。asp.netcore3.0 使用 DbProviderFactories 连接数据库_第1张图片

现在可以像.netframework中一样愉快的使用

 DbProviderFactory factory = DbProviderFactories.GetFactory("MySql.Data.MySqlClient");

但是如果直接这么写代码的话就会报错

System.ArgumentException:“The specified invariant name 'MySql.Data.MySqlClient' wasn't found in the list of registered .NET Data Providers.”

NET Core的数据库连接与.NET Framework略有不同。在.NET Framework中,程序可用的数据库驱动程序在整个系统范围内(通过machine.config)自动可用。也就是 mysql的.net连接驱动(mysql-connector-net-x.x.x.x.msi)就可以了。Program.cs或中Startup.cs。使用 以下DbProviderFactories.RegisterFactory方法完成注册:

SQL服务器

using System.Data.SqlClient;
DbProviderFactories.RegisterFactory("System.Data.SqlClient", SqlClientFactory.Instance);

MySQL的

using MySql.Data.MySqlClient;
DbProviderFactories.RegisterFactory("MySql.Data.MySqlClient", MySqlClientFactory.Instance);

PostgreSQL的

using Npgsql;
DbProviderFactories.RegisterFactory("Npgsql", NpgsqlFactory.Instance);

SQLite的

using Microsoft.Data.Sqlite;
DbProviderFactories.RegisterFactory("Microsoft.Data.Sqlite", SqliteFactory.Instance);

这些数据库访问工厂的单例都是继承DbProviderFactory,需要通过nuget安装对应的数据库客户端包例如 Mysql.Data

在这之后就是在需要的地方使用

DbProviderFactory  factory = DbProviderFactories.GetFactory("MySql.Data.MySqlClient");

DbConnection conn = factory.CreateConnection();

升级

在上述方法过程中是使用的直接注册工厂单例完成的;

public static void RegisterFactory(string providerInvariantName, string factoryTypeAssemblyQualifiedName);

例如mysql

  DbProviderFactories.RegisterFactory(providerName, "MySql.Data.MySqlClient.MySqlClientFactory,MySql.Data");

前面是工厂的类型名称,后面是类所在的应用程序集,即可达到同样的效果;

你可能感兴趣的:(asp.netcore3.0 使用 DbProviderFactories 连接数据库)