博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
.NET Core 3.0中的数据库驱动框架System.Data
阅读量:6555 次
发布时间:2019-06-24

本文共 1605 字,大约阅读时间需要 5 分钟。

虽然没有得到很多关注,但对于.NET中任何关系型数据库的访问都至关重要。因为其前身是ActiveX Data Objects,。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接口中,因为这将是一个破坏性更改。这意味着你不能同时使用异步操作和容易模拟的抽象接口。

Core 1.0中一次性重置抽象接口,使其与抽象类相匹配(Java过去在JDBC接口中就这样做过)。然而, Framework共享代码变得困难。

如果C# 8中包含,那么理论上可以使用它们以向后兼容的方式重新组合接口。但是, Core才有的特性, Framework不兼容,也就不能用于旧的编译器和。

DbDataReader.Get()字符串重载 #31595*

.NET Core 3.0的第一个特性是能够。长期以来,人们一直抱怨这个接口不能按名称引用列。这意味着你需要使用下面这个模式:

reader.GetInt32(reader.GetOrdinal(\u0026quot;columnName\u0026quot;))

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

reader.GetInt32(\u0026quot;columnName\u0026quot;)

Oracle的Connector/NET和已经这样做了。

因为性能原因,这个新方法不会被标记为virtual,从而使JIT编译器可以轻松地将它内联。由于上述原因,新的方法集不会添加到IDbDataReader中。

XmlDataDocument #33442

如果你了解的历史,那么这似乎是一个奇怪的选择。 4.0在2010年发布以来,它就已经被标记为过时,并警告说“XmlDataDocument类将在未来的版本中被删除”。

现在重新开始使用它的原因是一些WinForms和WPF应用程序在使用它。显示,“它在Apiport的不同类别中有1-7%的使用率。”

DatasetExtensions

.NET Core 3中没有的一个特性是类。虽然看起来非常简单,只有6个扩展方法,但是如果不修改System.Data本身,就无法构建AsDataView。原因相当复杂,涉及内部方法、类型转发和.NET标准带来的挑战。

如果你感兴趣,可以看下相关的话题,包括“”、“”和“”。

查看英文原文:

转载地址:http://iaxco.baihongyu.com/

你可能感兴趣的文章
ASP.NET MVC3 通过Url传多个参数方法
查看>>
遭遇sql server 2005 启动包未能正确加载需要重新安装错误,重装.NET FRAMEWORK经历分析...
查看>>
ASP.NET MVC上传文件----uploadify的使用
查看>>
简明 MongoDB 入门教程
查看>>
.NET Core 3.0中的数据库驱动框架System.Data
查看>>
北大AI公开课2019 | 雷鸣:人工智能革命与机遇
查看>>
英特尔开源计算机视觉数据标签工具CVAT,加速数据注释
查看>>
consule服务注册和发现 安装 部署
查看>>
多个帐户都用root 来登录 怎么看另一个用户使用的那些命令
查看>>
Map集合案例
查看>>
《FPGA全程进阶---实战演练》第十一章 VGA五彩缤纷
查看>>
第七次课程作业
查看>>
C++ 文本查询2.0(逻辑查询)
查看>>
Objective-C学习总结-13协议1
查看>>
web学习方向
查看>>
A*算法实现
查看>>
第一周 从C走进C++ 002 命令行参数
查看>>
【java】itext pdf 分页
查看>>
看看这个电脑的配置
查看>>
[转]【NoSQL】NoSQL入门级资料整理(CAP原理、最终一致性)
查看>>