asp.netcore3.0 使用 DbProviderFactories 连接数据库
在.netstandard2.0時 System.Data.Common 這個包里并沒有加入DbProviderFactories
DbProviderFactories類在.netframework中是非常重要的存在,依靠他可以適配各種數據庫客戶端(sqlserver、mysql、sqllite等)創建數據庫連接。
現在可以像.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 连接数据库的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【B】替换 Quartz.net 默认使
- 下一篇: .NET Core 3.0 System