.NET Core 3.0中的数据库驱动框架System.Data
虽然没有得到很多关注,但System.Data对于.NET中任何关系型数据库的访问都至关重要。因为其前身是ActiveX Data Objects,所以它也被称为ADO.NET。System.Data提供了一个通用框架,是构建.NET数据库驱动程序的基础。该框架提供了数据库驱动可以遵循的具体规范。
连接、命令和数据读取器都基于双重继承模式。它们分别从DbConnection、DbCommand和DbDataReader继承了一些基本功能。它们还实现了抽象接口IDbConnection、IDbCommand和IDbDataReader,这些接口可以模拟场景和非传统数据源。这种双重继承模式也适用于下面描述的所有基类。
虽然连接字符串通常被视为字符串,但有一些工具可以将它们表示为从DbConnectionStringBuilder继承的对象。这可以处理特定数据库的连接字符串解析,并使开发人员可以更好地了解特定数据库提供的设置。
System.Data早于ORMs for .NET,但它确实提供了一种通过实现DbDataAdapter和DbCommandBuilder类生成SQL的通用方法。这既可以直接使用,也可以与普通数据集和类型化数据集结合使用。
如果你正在寻找抽象工厂模式的真实示例,请查看DbProviderFactory。它的子类提供了连接、命令、命令参数、命令构建器和数据适配器。基本上是数据访问所需的一切,而不需要特定于数据库的逻辑。
接口的问题
如上所述,System.Data依赖于双重继承。在添加新方法时,这可能是一个问题。例如,.NET 4.5中的DbCommand增加了异步操作。但是,它们无法添加到相应的IDbCommand接口中,因为这将是一个破坏性更改。这意味着你不能同时使用异步操作和容易模拟的抽象接口。
微软本可以在.NET Core 1.0中一次性重置抽象接口,使其与抽象类相匹配(Java过去在JDBC接口中就这样做过)。然而,这会使与.NET Framework共享代码变得困难。
如果C# 8中包含默认接口方法,那么理论上可以使用它们以向后兼容的方式重新组合接口。但是,由于默认接口方法是.NET Core才有的特性,所以它与.NET Framework不兼容,也就不能用于旧的编译器和其他.NET语言。
DbDataReader.Get()字符串重载 #31595*
.NET Core 3.0的第一个特性是能够将列名传递给DbDataReader.GetXXX方法。长期以来,人们一直抱怨这个接口不能按名称引用列。这意味着你需要使用下面这个模式:
reader.GetInt32(reader.GetOrdinal(\u0026quot;columnName\u0026quot;))
显然(对有些人来说,早就该这样了),简化方式是提供一个字符串重载( string overload):
reader.GetInt32(\u0026quot;columnName\u0026quot;)
Oracle的Connector/NET和MySqlConnector已经这样做了。
因为性能原因,这个新方法不会被标记为virtual,从而使JIT编译器可以轻松地将它内联。由于上述原因,新的方法集不会添加到IDbDataReader中。
XmlDataDocument #33442
如果你了解XmlDataDocument的历史,那么这似乎是一个奇怪的选择。自从.NET 4.0在2010年发布以来,它就已经被标记为过时,并警告说“XmlDataDocument类将在未来的版本中被删除”。
现在重新开始使用它的原因是一些WinForms和WPF应用程序在使用它。Bug报告显示,“它在Apiport的不同类别中有1-7%的使用率。”
DatasetExtensions
.NET Core 3中没有的一个特性是DataTableExtensions类。虽然看起来非常简单,只有6个扩展方法,但是如果不修改System.Data本身,就无法构建AsDataView。原因相当复杂,涉及内部方法、类型转发和.NET标准带来的挑战。
如果你感兴趣,可以看下相关的话题,包括“将DatasetExtensions移植到.NET Core #19771”、“移植DataTable.AsDataView扩展方法 #27610”和“公开涉及在DataView中进行键搜索的内部虚拟方法 #31764”。
查看英文原文:System.Data in .NET Core 3.0
.NET Core 3.0中的数据库驱动框架System.Data相关推荐
- .NET Core 3.0 中的数据库驱动框架 System.Data
虽然没有得到很多关注,但System.Data对于.NET 中任何关系型数据库的访问都至关重要.因为其前身是 ActiveX Data Objects,所以它也被称为 ADO.NET.System.D ...
- ASP.NET Core 3.1 Web API和EF Core 5.0 中具有泛型存储库和UoW模式的域驱动设计实现方法
目录 介绍 背景 领域驱动设计 存储库模式 工作单元模式 使用代码 创建空白解决方案和解决方案架构 添加和实现应用程序共享内核库 PageParam.cs 在Entity Framework Core ...
- .NET Core 3.0 中的新变化
译者:楚人Leo 译文:http://www.cnblogs.com/leolion/p/10585834.html 原文:https://msdn.microsoft.com/en-us/magaz ...
- ASP.NET Core 3.0中使用动态控制器路由
原文:Dynamic controller routing in ASP.NET Core 3.0 作者:Filip W 译文:https://www.cnblogs.com/lwqlun/p/114 ...
- 使用内存数据库的.NET Core 3.0中基于身份(Identity-Based)的身份验证
目录 介绍 背景 先决条件 创建Web应用程序的步骤 第1步 第2步 第3步 第4步 第5步 第6步 运行您的应用程序 总结 下载源9.5 MB 介绍 身份验证是根据系统或用户的身份确定或给予其个人访 ...
- 在ASP.NET Core 2.0中创建Web API
目录 介绍 先决条件 软件 技能 使用代码 第01步 - 创建项目 第02步 - 安装Nuget包 步骤03 - 添加模型 步骤04 - 添加控制器 步骤05 - 设置依赖注入 步骤06 - 运行We ...
- Net Core 6.0 webApi+sqlServer数据库教程实战
Net Core 6.0 webApi+sqlServer数据库教程实战 教程前言 安装net core 环境 构建wepApi项目 操作数据库 接口调用 相关快速扩展 总结 教程前言 本教程从构建项 ...
- 避免在 ASP.NET Core 3.0 中为启动类注入服务
本篇是如何升级到ASP.NET Core 3.0系列文章的第二篇. Part 1 - 将.NET Standard 2.0 类库转换为.NET Core 3.0 类库 Part 2 - IHostin ...
- IHostingEnvironment VS IHostEnvironment - .NET Core 3.0中的废弃类型
原文:https://andrewlock.net/ihostingenvironment-vs-ihost-environment-obsolete-types-in-net-core-3/ 作者: ...
最新文章
- 日志中台不重不丢实现浅谈
- pack php 详解_函数pack的使用详解
- java_io_listFile()的应用和匿名内部类
- linux shell 网盘,linux在shell中获取时间
- Shiro表结构设计
- Node.js设置CORS跨域请求中多域名白名单的方法
- 直接拿来用!Visual Studio 扩展工具利用 AI 强化你的代码
- VBA中 各种数据类型的使用(自定义数据类型Type,数组,数据字典)、读写文件
- java reactor模式例子_JAVA BIO,NIO,Reactor模式总结
- 基于CentOS7上的搭建javaweb环境 - 学习笔记
- 有关C语言联合体(union)的使用
- 华为设备VRRP+MSTP冗余负载均衡实现
- C/C++教程 第十七章 —— MFC开发多人聊天室
- 高等数学 常用数学公式
- xp ie清除css缓存,如何清空浏览器的CSS缓存
- vue+离线百度地图
- 微信策划推出指纹支付
- 【Tools系列】之Excel冻结窗格
- container 和initContainers使用
- C# Excel插入Object
热门文章
- java的abstract的意思_java – spring中的abstract =“true”是什么意思?
- source insight 函数不能跳到definition_小技能: Windows10突然不能复制粘贴谁搞鬼
- php 打开pdf文件附件,pdf里怎么链接到附件
- linux离线安装redmine_Linux 下一款非常好用的翻译软件
- Python中的除法保留两位小数
- Code Review的重要性
- 【javascript】异步编年史,从“纯回调”到Promise
- Label 表达式绑定
- js(function(){alert(‘’‘)})
- Ms SQL Server 约束和规则