.NET Core 3.0 中的数据库驱动框架 System.Data

栏目: ASP.NET · 发布时间: 5年前

内容简介:虽然没有得到很多关注,但连接、命令和数据读取器都基于双重继承模式。它们分别从 DbConnection、DbCommand 和 DbDataReader 继承了一些基本功能。它们还实现了抽象接口 IDbConnection、IDbCommand 和 IDbDataReader,这些接口可以模拟场景和非传统数据源。这种双重继承模式也适用于下面描述的所有基类。虽然连接字符串通常被视为字符串,但有一些工具可以将它们表示为从 DbConnectionStringBuilder 继承的对象。这可以处理特定数据库的连接

虽然没有得到很多关注,但 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("columnName"))

显然(对有些人来说,早就该这样了),简化方式是提供一个字符串重载( string overload):

复制代码

reader.GetInt32("columnName")

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


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

新媒体营销概论

新媒体营销概论

秋叶、刘勇 / 人民邮电出版社 / 2016-12-1 / 36.00

本书共分6章。第1章重点介绍了新媒体的概念和特征,引导读者全面认识新媒体所处的行业;第2章用历史发展的眼光,介绍了不同类型的新媒体,让读者不仅能看到最新的新媒体模式,也能看到这个模式发展背后的脉络;第3章重点介绍了新媒体广告投放载体,便于读者选择适合自己的新媒体运营方式;第4章介绍了新媒体运营的策划思维;第5章介绍了新媒体舆情管理知识;第6章选取了可口可乐、海底捞、恒大冰泉等的新媒体助力传统行业转......一起来看看 《新媒体营销概论》 这本书的介绍吧!

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具