asp.netcore3.0 netstandard2.1 使用 DbProviderFactories 连接
在.netstandard2.0时 System.Data.Common 这个包里并没有加入DbProviderFactories 现在可以像.netframework中一样愉快的使用 DbProviderFactory factory = DbProviderFactories.GetFactory("MySql.Data.MySqlClient"); 但是如果直接这么写代码的话就会报错
NET Core的数据库连接与.NET Framework略有不同。在.NET Framework中,程序可用的数据库驱动程序在整个系统范围内(通过machine.config)自动可用。也就是 mysql的.net连接驱动(mysql-connector-net-x.x.x.x.msi)就可以了。 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(); 升级在上述方法过程中是使用的直接注册工厂单例完成的; // // 参数: // 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-mvc – 实现IModelBinder的最佳实践
- 如何在asp.net中编写javascript代码后面使用C#
- asp.net-mvc – asp.net mvc 4应用程序的入口点是什么?
- asp.net – 为什么我的函数在加载UpdatePanel后运行多次
- 如何创建自定义授权属性以检查Asp.Net Core中的角色和URL路
- asp.net-mvc – IIS显示服务器错误而不是自定义错误
- asp.net – 运行示例应用程序时出错,Uncaught Error:Signa
- asp.net-mvc – 如何包括一个模型与RedirectToAction?
- 在视图中确定ASP.NET Core环境名称
- 离开ASP.NET和SQL SERVER你有什么选择吗?