写点什么

微软推出 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:004835

评论

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

React-hooks面试考察知识点汇总

beifeng1996

React

JavaScript——BOM、JSON

胖虎不秃头

前端 js 10月月更

架构实战营模块 2 作业

陌生流云

架构实战营

Docker下,两分钟极速体验Nacos配置中心

程序员欣宸

Docker nacos 10月月更

什么是光网络,几张图就可以很好的解释!

wljslmz

光纤 10月月更 光网络 通信网络

2022-10-05:在一个 n x n 的整数矩阵 grid 中, 每一个方格的值 grid[i][j] 表示位置 (i, j) 的平台高度。 当开始下雨时,在时间为 t 时,水池中的水位为 t 。

福大大架构师每日一题

算法 rust 福大大

C++学习---cstdio的源码学习分析06-关闭文件函数fclose

桑榆

c++ 源码分析 10月月更

从这两道题重新理解,JS的this、作用域、闭包、对象

loveX001

JavaScript

Python进阶(二)初识Python数据元素:字典&时间

No Silver Bullet

Python 时间 字典 10月月更 数据元素

Vue的computed和watch的区别是什么?

bb_xiaxia1998

Vue

JVM——垃圾回收算法

琦彦

Java JVM 垃圾回收 10月月更

《Rust for Rustaceans》读书笔记2

袁世超

rust

通过单步调试的方式学习 Angular 中带有选择器的内容投影使用方式

汪子熙

typescript 前端开发 angular web开发 10月月更

架构师的十八般武艺:领域建模

agnostic

领域建模

【愚公系列】2022年10月 Go教学课程 019-循环结构之for

愚公搬代码

10月月更

面试官:说说JS作用域和作用域链,我是这样回答的

loveX001

JavaScript

React组件之间的通信方式总结(上)

beifeng1996

React

大数据ELK(十四):Elasticsearch编程(基本操作)

Lansonli

ES 10月月更

每日一题之Vue数据劫持原理是什么?

bb_xiaxia1998

Vue

作为Android Coder,你了解注解吗?

子不语Any

后端 java; 10月月更

聊聊前端面试中的js同步与异步问题

loveX001

JavaScript

JavaScript——JS中的正则表达式

胖虎不秃头

前端 js 10月月更

JavaScript——Document Object Model

胖虎不秃头

前端 js 10月月更

改造微服务的时机

穿过生命散发芬芳

微服务 10月月更

Python进阶(一)初识Python数据元素:列表&元组

No Silver Bullet

Python 列表 元组 10月月更 数据元素

爬虫练习题(一)

张立梵

Python. 10月月更 爬虫案例

一天梳理完React所有面试考察知识点

beifeng1996

React

第九期 - 模块二

wuli洋

一文了解 CPython 中的垃圾收集器

宇宙之一粟

Python 垃圾回收算法 垃圾收集器 10月月更

深入理解JS作用域链与执行上下文

loveX001

JavaScript

React组件之间的通信方式总结(下)

beifeng1996

React

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