立即领取|华润集团、宁德核电、东风岚图等 20+ 标杆企业数字化人才培养实践案例 了解详情
写点什么

微软推出 Microsoft.Data.SqlClient,替代 System.Data.SqlClient

  • 2019-10-22
  • 本文字数:1118 字

    阅读完需:约 4 分钟

微软推出Microsoft.Data.SqlClient,替代System.Data.SqlClient

背景

在 .NET 创建之初,System.Data 框架是一个重要的组件。它为创建 .NET 数据库驱动程序提供了一种方式,类似 Visual Basic 的 ActiveX Data Objects。虽然 API 不一样,但重用了它的名称,所以才有了 ADO .NET 这个绰号。


ADO 和 ADO .NET(即 System.Data)之间的一个关键区别是对象模型。在 ADO 中,通常只需要使用ConnectionCommandRecordset对象,OleDB/ODBC 驱动程序隐藏掉了其他东西。这提高了代码复用率,但开发人员难以将一些数据库特性暴露出来。


在 ADO .NET 中,你也可以使用 OleDB/ODBC,但在大多数情况下会使用一系列特定于数据库的类。这些类派生自 DBConnection、DBCommand 和 DBDataReader,可以保持原来的代码复用性。但因为它们是强命名类型,需要显式地作为 .NET 库的一部分。


可能是为了简化开发,SQL Server、OleDB 和 ODBC 驱动程序同时作为 System.Data 框架的一部分。这种方式在当时是可以接受的,但却给现在的 SQL Server 开发周期带来了问题。


实际上,SQL Server 的发布周期已经从 3 年到 5 年变成了几乎每年一次。发布的新版本通常需要更新 .NET 驱动程序,如果它被绑定到 .NET 标准发布周期中,这就不可能及时发布。


第一步是拆分 System.Data 库。 .NET Core 完成了这一步,为每个数据库驱动程序提供了单独的库。下一步是将 SQL Server 驱动程序与 .NET Core/Standard 完全分离。为此,他们创建了 Microsoft.Data.SqlClient。

升级到 Microsoft.Data.SqlClient

对于大多数开发人员来说,使用 Microsoft.Data.SqlClient 将会变得非常简单,只需要修改每个类顶部的 using 语句即可。另外,它使用了相同的类名和 API,并提供了大致相同的特性。


对于轻量级 ORM,如 Dapper 或 RepoDB,不需要做进一步的改动。


如果开发人员使用 ORM 来管理连接(例如 EF、NHibernate),就需要等待 ORM 升级。


比较麻烦的是那些混合 ORM。如果一个 ORM 使用了 Microsoft.Data.SqlClient,而另一个使用了 System.Data.SqlClient,就不能同时正常运行。这在使用共享 SqlTransaction 对象时尤为重要。

可用性

1.0 版 Microsoft.Data.SqlClient 可用于这些平台:


  • .NET Framework 4.6+

  • .NET Core 2.1+

  • .NET Standard 2.0+

已知问题

并不是每个人都需要马上升级。文档中指出了这些已知问题:


  • 用户数据类型(UDT)可能无法与 Microsoft.Data.SqlClient 一起使用。

  • Azure Key Vault 和 Microsoft.Data.SqlClient 没有密钥存储。

  • Microsoft.Data.SqlClient 不支持安全飞地的 Always Encrypted。

  • 只有 .NET Framework 和 .NET Core 支持 Always Encrypted, .NET Standard 不支持,因为 .NET Standard 缺少某些加密依赖项。


更多信息请参见Microsoft.Data.SqlClient FAQ


原文链接


Introducing Microsoft.Data.SqlClient


2019-10-22 08:004354

评论

发布
暂无评论
发现更多内容

关于互联网留存和收益你知道多少—带你走近用户成长体系

滴滴普惠出行

数字货币是大势所趋,新冠疫情后必须率先发展DCEP

CECBC

数字货币 银行

揭秘App的财富密码,剖析算法工程师价值来源

峰池

人工智能 互联网 推荐算法 互联网公司

奈学开发者社区分享:Java - 设计模式的7个设计原则

古月木易

Java 设计模式

奈学开发者社区分享:Java - 设计模式的7个设计原则

奈学教育

Java 设计模式 设计原则

bug 回忆录(一)

志学Python

写给新人算法工程师

峰池

互联网 新人 推荐算法 算法工程师

关于深浅拷贝

西贝

Java 大前端 基础

公有云厂商哪家强?本月UCloud、百度云、阿里云位居三甲——2020年8月云主机性能评测排名

博睿数据

H5选图预览到上传最佳实践

阿里云金融线TAM SRE专家服务团队

android H5

三年筑一“用”:长跑中的智能IP网络

脑极体

戴尔G系列游戏本助玩家激战英特尔大师挑战赛

E科讯

Electron 快速入门及最新安装教程

程序员学院

Java html 大前端 Electron node,js

世界的下一个主宰——人工智能

CECBC

人工智能 智能时代

PPT画成这样,述职答辩还能过吗?

小傅哥

Java 小傅哥 流程图 架构师 PPT

一个草根的日常杂碎(9月27日)

刘新吾

随笔杂谈 生活记录 社会百态

中国Prime会员独享巅峰64小时超长跨境网购时间

爱极客侠

for-range造就循环永动机?快来看看go中for-range的那些事!

Gopher指北

后端 for Go 语言

实践分享丨物联网操作系统中的任务管理

华为云开发者联盟

华为 数据 物联网 进程

华为全联接2020:环信AI领跑,输出5大行业最佳实践

DT极客

大学四年我是怎么写操作系统和计算机网络的?掏心掏肺的分享!

小林coding

学习 程序员 计算机网络 操作系统 计算机基础

牛皮!应届生面试阿里Java岗,七轮过后定级P6,薪资44.8W

面试 计算机基础 编程开发 架构师技能

一文领略 HTTP 的前世今生

yes

互联网 网络 HTTP 阿帕网

深入理解MySQL中事务隔离级别的实现原理

X先生

MySQL 数据库 后端 事务

一文纵览向量检索

华为云开发者联盟

数据 搜索 检索 检查

区块链会替代大数据吗?

CECBC

区块链 大数据

初学源码之——银行案例手写IOC和AOP

Java架构师迁哥

第 0 次面试

escray

程序员 面试 面经

Binder那么弱怎么面大厂?

博文视点Broadview

Java android 通信 移动开发 Android进阶

一个草根的日常杂碎(9月28日)

刘新吾

随笔杂谈 生活记录 社会百态

架构1期第三周作业一

道长

极客大学架构师训练营

微软推出Microsoft.Data.SqlClient,替代System.Data.SqlClient_语言 & 开发_Jonathan Allen_InfoQ精选文章