asp.netcore3.0 netstandard2.1 使用 DbProviderFactories 连接数据库
在.netstandard2.0时 System.Data.Common 这个包里并没有加入DbProviderFactories
DbProviderFactories类在.netframework中是非常重要的存在,依靠他可以适配各种数据库客户端(sqlserver、mysql、sqllite等)创建数据库连接。
现在 随着.netcore3.0的正式发布,已经实现了.netstandard2.1,并且在此版本中实现了 DbProviderFactories
现在可以像.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)就可以了。
而.NET Core中不是这种情况,您必须注册要使用的数据库驱动程序-通常在
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();
升级
在上述方法过程中是使用的直接注册工厂单例完成的;
按照官方的API 可以使用注册指定的工厂类型和应用程序集来完成
// // 参数: // providerInvariantName: // // factoryTypeAssemblyQualifiedName: public static void RegisterFactory(string providerInvariantName, string factoryTypeAssemblyQualifiedName);
例如mysql
DbProviderFactories.RegisterFactory(providerName, "MySql.Data.MySqlClient.MySqlClientFactory,MySql.Data");
前面是工厂的类型名称,后面是类所在的应用程序集,即可达到同样的效果;
这样的好处就是自己在封装数据库方法的时候不需要再将mysql,sqlserver的包一起打入到框架中,而是交由使用的web或者desktop项目来加载数据库客户端包,用法就可以像 .netframework项目一样的使用了。
- ASP.net core 2.0.0 中 asp.net identity 2.0.0 的基本使用(一)—修改数据库连接
- 创建第一个ASP.NET CORE程序 使用DBFirst模式连接数据库
- Asp.Net Core 轻松学-10分钟使用EFCore连接MSSQL数据库
- ASP.NET在IIS上部署使用Oracle数据库无法连接数据库解决方法(转载)
- ASP.NET中使用web.config配置数据库连接
- ASP.NET - 如何:使用 SqlDataSource 控件连接到数据库
- Asp.Net Core使用MySql.Data连接MySql示例
- ASP.NET - 如何:使用 AccessDataSource 控件连接到 Access 数据库
- ASP.NET在IIS上部署使用Oracle数据库无法连接数据库解决方法
- asp.net mvc 3.0详细笔记__09__创建数据库,应用EF连接模型类和数据表
- Access (ASP.NET 开发知识)包括 (数据库连接知识 ) 和(socancode三层 使用的知识)
- aspnet core 2.1中使用jwt从原理到精通一
- asp.net core 2.0 连接mysql 使用 MySql.Data.EntityFrameworkCore 遇到的问题
- ASP.NET中使用web.config配置web应用程序中的数据库连接
- ASP.NET中使用web.config配置web应用程序中的数据库连接
- 浪曦-ASP.NET-简易留言板------------------------2(数据库连接和使用)
- 树型节点与数据库的动态连接(asp.net 2.0 TreeView控件的使用)
- 在ASP.NET(C#)中使用Oralce Object For OLE 2.3连接Oracle 8.0.5数据库!
- 视频教程--ASP.NET MVC 使用 Petapoco 微型ORM框架+NpgSql驱动连接 PostgreSQL数据库
- asp.net使用LINQ to SQL连接数据库及SQL操作语句用法分析