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.netcore3.0 netstandard2.1 使用 DbProviderFactories 连接数据库的更多相关文章
- 关于asp.netCore3.0区域和路由配置
		
在ASP.NET Core 3.0中路由配置和2.0不一样了 一.MVC 服务注册 ASP.NET Core 3.0 添加了用于注册内部的 MVC 方案的新选项Startup.ConfigureSer ...
 - asp.netCore3.0 中使用app.UseMvc() 配置路由
		
一.新配置路由策略 在 Asp.Net Core 3.0中默认不再支持app.UserMvc() 方式配置路由 系统. 而是使用新的模式,点击查看asp.netCore3.0区域和路由配置变化 默认 ...
 - asp.netCore3.0区域和路由配置变化
		
一.MVC 服务注册 ASP.NET Core 3.0 添加了用于注册内部的 MVC 方案的新选项Startup.ConfigureServices.三个新的顶级扩展方法与 MVC 方案上IServi ...
 - [译]使用DOT语言和GraphvizOnline来可视化你的ASP.NETCore3.0终结点01
		
这是系列文章中的第一篇:使用GraphvizOnline可视化ASP.NETCore3.0终结点.. 第1部分-使用DOT语言来可视化你的ASP.NETCore3.0终结点(本文) 第2部分-向ASP ...
 - Asp.NetCore3.1开源项目升级为.Net6.0
		
概述 自从.Net6.0出来后,一直想之前开发的项目升级.Net6.0,有时想想毕竟中间还跨了个5.0版本,升级起来不知道坑大不大,最近抽时间对升级的方案做了些研究,然后将代码升级为.Net6.0.本 ...
 - netcore2.2以及netcore3.0下的swagger使用
		
自从core3.0发布后,中间有很多东西跟以往用到的2.2版本相差特别多,今天主要来说一下swagger不同版本下的使用. swagger就是一个可视化接口工具,为了方便让调用者能够很好的了解接口以及 ...
 - VS2019 NetCore3.0找寻grpc模板
		
今天研究Google的grpc框架的时候看到了https://www.cnblogs.com/yilezhu/p/10631420.html这哥们儿的博客 按照博客的内容找寻grpc模板,始终找不到A ...
 - NetCore3.0实现自定义IOC容器注入
		
在之前的ASP.NET MVC实现依赖注入一文中,通过替换默认的ControllerFactory来达到对Controller生命周期的拦截,实现自定义的对象注入,在NetCore3.0中需要重新实现 ...
 - 【IHttpHandler】在ASP.Net2.0中使用UrlRewritingNet实现链接重写
		
很多时候我们需要链接转向(Url Rewriting),例如二级域名转向.文章访问链接等场合. 让我们看两个例子: 1 你现在看到的当前作者的博客园的域名: http://jx270.cnblogs. ...
 
随机推荐
- Nacos(八):Nacos持久化
			
参考和感谢 Spring Cloud Alibaba基础教程:Nacos的数据持久化 前言 前景回顾: Nacos(七):Nacos共享配置 Nacos(六):多环境下如何"管理" ...
 - AI资源对接需求汇总:第3期
			
更好的阅读体验,请查看首发原文链接:AI资源对接需求汇总:第3期 平台介绍 平台由人工智能领域几个知名原创公众号发起,总读者约25万. 主要面向人工智能领域的从业者,涵盖图像处理.三维计算机视觉.机器 ...
 - [C#] 建立UDP连接、发送广播
			
说明: 通过建立本地UdpClient与远程UdpClient进行通讯,亦可直接发送到其他已存在的远程端. 基本原理:构建一个本地的udpcSend实例,开启多线程进行监听,然后再发送广播. 案例有字 ...
 - 一文读懂HashMap
			
推荐 转载:https://www.jianshu.com/p/ee0de4c99f87
 - x86—EFLAGS寄存器详解(转载)
			
鉴于EFLAGS寄存器的重要性,所以将这一部分内容从处理器体系结构及寻址模式一文中单独抽出另成一文,这部分内容主要来自Intel Developer Mannual,在后续的内核系列中遇到的许多和EF ...
 - 洛谷P1273 有线电视网 树上分组背包DP
			
P1273 有线电视网 )逼着自己写DP 题意:在一棵树上选出最多的叶子节点,使得叶子节点的值 减去 各个叶子节点到根节点的消耗 >= 0: 思路: 树上分组背包DP,设dp[u][k] 表示 ...
 - GitHub 简单教程
			
码农朋友们都知道,GitHub是一个面向开源及私有软件项目的托管平台,上面托管了众多的优秀的项目,比如Linux内核源码.Git源码.机器学习框架Tensorflow等等.当然,除了这些顶尖项目外,还 ...
 - VScode神器如何同步配置和所装插件
			
由于近期编辑器换用vscode,回到家里也需要写代码,但是家里电脑也需要安装vscode,并设置相同配置和插件.想到以前webstrom可以直接导出配置然后安装. 但是vscode无此配置,突发奇想g ...
 - 「每日五分钟,玩转JVM」:对象内存布局
			
概览 一个对象根据不同情况可以被划分成两种情况,当对象是一个非数组对象的时候,对象头,实例数据,对齐填充在内存中三分天下,而数组对象中在对象头中多了一个用于描述数组对象长度的部分 对象头 对象头分为两 ...
 - 深入SpringMVC视图解析器
			
ViewResolver的主要职责是根据Controller所返回的ModelAndView中的逻辑视图名,为DispatcherServlet返回一个可用的View实例.SpringMVC中用于把V ...